Оптимизация муравьиных колоний на 01 МКП

Я пытаюсь реализовать ACO для 01MKP. Мои входные значения взяты из библиотеки OR mknap1.txt. Согласно моему алгоритму, сначала я выбираю предмет случайным образом. Затем я вычисляю вероятности для всех других элементов на строительном графике. уравнение вероятности зависит от уровня феремона и эвристической информации.

p[i]=(tau[i]*n[i]/Σ(tau[i]*n[i]). 

Ячейки моей матрицы феремонов имеют постоянное значение в начале (0,2). по этой причине, когда я пытаюсь найти следующий элемент, матрица феремона становится неэффективной из-за 0,2. Итак, моя функция вероятности определяет следующий элемент, который проверяет эвристическую информацию. Как вы знаете, эвристическое информационное уравнение

n[i]=profit[i]/Ravg. 

(Ravg - это среднее ограничение ресурсов). по этой причине мой проб. Функция выбирает элемент, который имеет наибольшую прибыль. (Допустим, на первой итерации мой алгоритм выбрал элемент случайным образом с прибылью в 600 единиц. Затем на второй итерации выбирается значение прибыли 2400. Но в OR-библиотеке элемент, имеющий значение прибыли 2400, вызывает нарушение ресурса. до, второй выбранный является предметом, который имеет 2400 прибыли.

что-то не так с моим алгоритмом? Я надеюсь, что люди, которые знают кое-что о ACO, должны помочь мне. Заранее спасибо.

Входные значения:

6 10 3800//no of items (n) / no of resources (m) // the optimal value
 100 600 1200 2400 500 2000//profits of items (6)
 8 12 13 64 22 41//resource constraints matrix (m*n)
 8 12 13 75 22 41
 3 6  4  18 6  4
 5 10 8  32 6  12
 5 13 8  42 6  20
 5 13 8  48 6  20
 0 0  0  0  8  0
 3 0  4  0  8  0
 3 2  4  0  8  4
 3 2  4  8  8  4
 80 96 20 36 44 48 10 18 22 24//resource capacities.

Мой алгоритм:

for i=0 to max_ant
 for j=0; to item_number
 if j==0
 {
  item=rand()%n
  ant[i].value+=profit[item]
  ant[i].visited[j]=item
 }
 else
 {
  calculate probabilities for all the other items in P[0..n]
  find the biggest P value.
  item=biggest P's item.
  check if it is in visited list
  check if it causes resource constraint.
  if everthing is ok:
   ant[i].value+=profit[item]
   ant[i].visited[j]=item
  }//end of else
 }//next j
 update pheremon matrix => tau[a][b]=rou*tau[a][b]+deltaTou
}//next i

0 ответов

Другие вопросы по тегам