Python Pulp не добавляет все ограничения переменных и забывает целевую функцию

У меня возникают некоторые проблемы с использованием пульпы модуля. Я хочу создать задачу смешанного целочисленного линейного программирования и записать ее в виде файла LP. После этого я решаю это с помощью cplex.

Проблема в том, что когда я добавляю вторые ограничения, целевая функция становится ложной (добавляется фиктивная функция), и только первое ограничение добавляется только с переменной решения x.

Это мой код: надеюсь, вы мне поможете!

bay_model = pulp.LpProblem('Bay Problem', pulp.LpMinimize)

y = pulp.LpVariable.dicts(name = "y",indexs = (flight, flight, gates),
                          lowBound = 0, upBound = 1,cat = pulp.LpInteger)

x = pulp.LpVariable.dicts(name = "x",indexs = (flight,gates),lowBound = 0,                             
                          upBound = 1, cat=pulp.LpInteger)




bay_model += pulp.lpSum([x[i][j]*g.distance[j] for i in flight for j in gates])

for i in flight:
     bay_model += pulp.lpSum([x[i][j] for j in gates]) == 1
     print "flight must be assigned" + str(i)

for k in gates:
     bay_model += [y[i][j][k] * f.time_matrix[i][j] for i in flight for j in flight if f.time_matrix[i][j] == 1] <= g.capacity[k]
     bay_model += [(2 * y[i][j][k] - x[i][k] - x[j][k]) for i in flight for j in flight] == 0
     print "time constraint" + str(k)

person XsjakieX    schedule 04.06.2015    source источник
comment
Можете ли вы дать мне образец того, как выглядит рейс и выход на посадку, или примерные значения?   -  person dassouki    schedule 06.07.2015
comment
Рейс и ворота - это просто диапазоны для обозначения пролетов и ворот. Например, если есть 100 рейсов, то flight = 0,1,2 ... 99 или xrange (100) то же самое верно для ворот. У меня есть сильное ощущение, что проблема в записи lp файла. Когда я пишу это в MPS, он работает отлично.   -  person XsjakieX    schedule 07.07.2015


Ответы (1)


Я не думаю, что понимание списка [x [i] for i in ...] может быть добавлено в bay_model таким образом. Если вы хотите, чтобы ограничение сохранялось для каждого элемента в списке, вы можете определить элементы заранее:

for i in flights:
  for j in flights:
    if f.time_matrix[i][j] == 1:
      for k in gates:
        bay_model += y[i][j][k] * f.time_matrix[i][j] <= g.capacity[k]
person Koen Peters    schedule 08.10.2015