MathProg рекурсивная функция

Я столкнулся с проблемой подсчета связанных узлов в Mathprog при попытке решить довольно большую проблему TSP: допустим, у меня есть

set C  := 0..645;  #  a set of nodes
set A  := {i in  C, j in  C: i!=j};  # a set of edges

функция расстояния d(c1,c2)

var a{(i,j) in A}, binary;  # binary variables that mean "go through edge i-j"
minimize walk: sum{(i,j) in A} d[i,j] * a[i,j];  # an objective function

и некоторые другие условия

subject to get_out {i in C}: sum{(i,j) in A} a[i,j] = 1; 
subject to get_in  {j in C}: sum{(i,j) in A} a[i,j] = 1;

Выполнение всех возможных сокращений для решения схемы требует блока питания и некоторых других вещей, но на более чем 20 узлах проблема слишком жадная, и я не могу найти решение.

Поэтому я подумал, что заставлю решателя объединить все внушительные [i,j]

 a[i,j], a[j,k], a[k,w], ..., a[z,i] =1 with i!= {j,k,w,...,z} and j!={k,w,...,z} and ...

который так же, как

 check(a[i,C]) {
   while C is empty 
     take j: a[i,j]=1;
     check( a[j,{C diff {i}}] ) 
 }

что может не привести к решению, но весьма разочаровывает невозможность реализовать такую ​​простую вещь... есть ли способ реализовать такой псевдокод в mathprog (gmpl)?

0 ответов

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