Pyomo Constrain Building需要很长时间才能运行

问题描述

我在Pyomo中相当虚构,并试图为我的MIP建立约束。正在使用以下方法建立约束条件

def one_tour_per_movement_rule(mdl,i):
    return(sum(mdl.a[i,j] * mdl.X[j] for j in mdl.J) == 1)
mdl.one_tour_per_movement_rule = pe.Constraint(mdl.II,rule=one_tour_per_movement_rule)

但是要花很多时间才能运行,最终崩溃。这不是大问题:

len(mdl.X) = 250000,i <= 3500

任何建议我做错了。

下面是整个代码

import pyomo.environ as pe
from __config__ import pr_glpk_executable
from lib import load_obj
from copy import deepcopy
from datetime import datetime


# Examples: https://github.com/Pyomo/Pyomogallery/wiki
if OptData is None:
   OptData = load_obj('opt_data')

dict_Movements = deepcopy(OptData.dict_Movements)
dict_Tours = deepcopy(OptData.dict_Tours)
MovPerTour = deepcopy(OptData.MovPerTour)

list_Movements = list(dict_Movements.keys())

list_Tours = list(dict_Tours.keys())
dict_tour_cost = {x: float(dict_Tours[x]['tour_cost']) for x in list_Tours}

print('Creating model ...')
# Create a concrete model
mdl = pe.ConcreteModel(name='TourOptimization')

print('Initliazing sets ...')
#  Define sets ##
#  Sets
#       II   Movements
#       J   Tours;
mdl.II = pe.Set(initialize=list_Movements,doc='Set of movements')
mdl.J = pe.Set(initialize=list_Tours,doc='Set of Tours')

# Create Tour selection variables
mdl.X = pe.Var(mdl.J,within=pe.Binary,doc='Decision variable on whether a tour is selected or not')

# Define parameters
print('Define cost parameters ...')
mdl.c = pe.Param(mdl.J,initialize=dict_tour_cost,default=0)

print('Define parameters alpha ... stated at {}'.format(datetime.Now()))
mdl.a = pe.Param(mdl.II,mdl.J,initialize=MovPerTour,default=0,mutable=True)

print('Define Objective func ... stated at {}'.format(datetime.Now()))

def obj_rule(mdl):
    return sum(mdl.c[j] * mdl.X[j] for j in mdl.J)
mdl.objective = pe.Objective(rule=obj_rule,sense=pe.minimize)

print('Define Constrains ... stated at {}'.format(datetime.Now()))

def one_tour_per_movement_rule(mdl,rule=one_tour_per_movement_rule)

print('Solving model ... stated at {}'.format(datetime.Now()))
solver = pe.solverFactory('glpk',executable=pr_glpk_executable)
results = solver.solve(mdl)

print(results)
print('#'*50)

# sends results to stdout
results.write()
print("\ndisplaying Solution\n" + '-'*60)

mdl.X.display()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)