s . id=id;
}
@ Override
public Container clone () {clone= new Container ( id, volume, cargo);
return clone;
}
/* (non-Javadoc)
*see java. lang. Object # toString ()
*/
@ Override
public String toString () {
return Контейнер +
, nID: + Id +
nОб'ём: + Volume +
, nГрузопод'ёмность: + Cargo;
}
}
Клас ЛПР. У цього класу всього одне поле - список ваг критеріїв, що використовується їм при розрахунку корисності об'єкта. ЛПР вміє порівнювати об'єкти, використовуючи вкладений клас Бінарне відношення raquo ;, вміє відображати пару об'єктів в один об'єкт і отримувати значення корисності будь-якого об'єкта. Для ЛПР в даному випадку корисність об'єкта прямо пропорційна значенням оцінок за критеріями об'єкта і обернено пропорційна його масі і обсягом.
/**
* ЛПР (особа, яка приймає рішення).
* @ author AtemB
*
*/
public class Boss {
class BossBinaryRelation implements BinaryRelation lt; Item gt; {
@ Override
public Item compare (Item i1, Item i2) {
//Звичайно, не сама пряморукая реалізація, зате відносно зрозуміла для сприйняття.
//У цей список заносяться різниці оцінок за критеріями. lt; Double gt; rates= new LinkedList lt; Double gt; () ;. add (( double ) (i1. rate1 - i2. rate1)) ;. add (( double ) (i1. rate2 - i2. rate2));
//Прапори в цьому списку означають, позитивний або негативний
//результат порівняння критеріїв.
//Однакові значення до списку не заносяться. lt; Boolean gt; flags= new LinkedList lt; Boolean gt; ();
for (Double d: rates) {
if (d. doubleValue () gt; 0) {. add ( true );
} else if (d. doubleValue () lt; 0) {. add ( false );
}
}
//Якщо спіок прапорів порожній, значить, об'єкти по перевіряється критеріям рівні.
if (flags. isEmpty ()) {
return null ;
} else {
boolean resultFlag= false ;
for ( int i=1; i lt; flags. size (); i ++) {= flags. get (i);
//Якщо в списку зустрічаються різні значення прапорів, значить,
//об'єкти незрівнянні за значущим критеріям
//(один краще за одними критеріями, інший по іншим).
if (flags. get (i - 1)!=flags. get (i)) {
return null ;
}
}
//Якщо попередній цикл виконався до кінця, значить,
//один з об'єктів виявився краще іншого.
//Перевіряємо значення результуючого прапора
//і повертаємо домінуючий об'єкт.
if (resultFlag) {
return i1;
} else {
return i2;
}
}
}
}
private List lt; Double gt; weights;
public Boss () {= new ArrayList lt; Double gt; ();
{. add (0.45) ;. add (0.45) ;. add (0.04) ;. add (0.04) ;. add (0.02);
}
}
/**
* Отримати корисність об'єкта.
*