private int stepCount;
/** Значения переменных, вычисленные в результате работы алгоритма */
private int[] optChoice;
/** Время работы алгоритма */
private long time;
/**
* Инициализация исходными данными
*
* @param threatProb массив возможностей проявления угроз
* @param threatDamage массив ущербов от непредотвращения угроз
* @param toolPrice массив стоимостей средств защиты
* @param preventionProb матрица возможностей предотвращения угроз
* @param minDamage минимальный предотвращенный ущерб
*/
public void init(double[] threatProb,
double[] threatDamage,
double[] toolPrice,
double[][] preventionProb,
double minDamage) {
this.threatProb = threatProb;
this.threatDamage = threatDamage;
this.toolPrice = toolPrice;
this.preventionProb = preventionProb;
this.minDamage = minDamage;
}
/**
* Запуск алгоритма
*/
public void run() {
long start = System.currentTimeMillis();
int[] optChoice = new int[toolPrice.length];
Arrays.fill(optChoice, 1);
step(optChoice, objectiveFunc(optChoice));
time = System.currentTimeMillis() - start;
}
/**
* Один шаг работы алгоритма
*/
private void step(int[] optChoice, double value) {
stepCount++;
int index = -1;
double minValue = value;
// поиск точки окрестности с наибольшим
// значением компоненты вектора спада
for (int i = 0; i < toolPrice.length; i++) {
if (optChoice[i] == 1) {
ISSN 0236-3933. Вестник МГТУ им. Н.Э. Баумана. Сер. “Приборостроение”. 2008. № 2 79