Python-Pyomo:Pyomo中的变量域错误
我想解决一个整数规划问题,其中决策变量被限制在一个特定的集合中 例如,在[2,5,7,10]中必须选择决策变量席。< /P> 为了进行测试,我使用Pyomo编写了python代码,如下所示:Python-Pyomo:Pyomo中的变量域错误,python,pyomo,Python,Pyomo,我想解决一个整数规划问题,其中决策变量被限制在一个特定的集合中 例如,在[2,5,7,10]中必须选择决策变量席。< /P> 为了进行测试,我使用Pyomo编写了python代码,如下所示: from pyomo.environ import * model = AbstractModel() model.X = Set(initialize=[2, 5, 7, 10]) model.x = Var(within=model.X) model.obj = Objective(expr=model
from pyomo.environ import *
model = AbstractModel()
model.X = Set(initialize=[2, 5, 7, 10])
model.x = Var(within=model.X)
model.obj = Objective(expr=model.x+1)
m = model.create_instance()
opt = SolverFactory("glpk")
results = opt.solve(m)
执行这些代码时,我收到一条错误消息:
TypeError:名为“x”的变量的域类型无效。变量不是连续的、整数的或二进制的
以下是我的问题:
- 这个错误的原因是什么
- 如何处理李>
- 是否有其他优化工具可以处理此类问题
- 这个错误的原因是什么
如错误所示,GLPK等混合整数线性解算器只能处理连续、二进制和一般整数变量。当您指定
您正试图创建一个离散的分类变量,虽然Pyomo可以在内部表示该变量,但它无法传递给特定的解算器model.X = Set(initialize=[2, 5, 7, 10]) model.x = Var(within=model.X)
- 如何处理
有一种使用一组二进制变量的标准格式:
model.X = Set(initialize=[2, 5, 7, 10]) model.select_x = Var(model.X, domain=Binary) model.x = Var() def pick_one(m): return 1 == sum(m.selext_x[i] for i in m.X) model.pick_one = Constraint(rule=pick_one) def set_x(m): return m.x == sum(i*m.select_x[i] for i in m.X) model.set_x = Constraint(rule=set_x)
- 是否有其他优化工具可以处理此类问题 虽然有一些解算器可以处理离散的分类变量,但使用上面的重新表述可能会更好
- 这个错误的原因是什么
如错误所示,GLPK等混合整数线性解算器只能处理连续、二进制和一般整数变量。当您指定
您正试图创建一个离散的分类变量,虽然Pyomo可以在内部表示该变量,但它无法传递给特定的解算器model.X = Set(initialize=[2, 5, 7, 10]) model.x = Var(within=model.X)
- 如何处理
有一种使用一组二进制变量的标准格式:
model.X = Set(initialize=[2, 5, 7, 10]) model.select_x = Var(model.X, domain=Binary) model.x = Var() def pick_one(m): return 1 == sum(m.selext_x[i] for i in m.X) model.pick_one = Constraint(rule=pick_one) def set_x(m): return m.x == sum(i*m.select_x[i] for i in m.X) model.set_x = Constraint(rule=set_x)
- 是否有其他优化工具可以处理此类问题 虽然有一些解算器可以处理离散的分类变量,但使用上面的重新表述可能会更好