我目前正在尝试弄清楚如何使用 pyomo 将其变成一个用于 dat 文件的抽象模型。
我附上了我的问题的图片
我当前的最佳值和最佳解决方案代码以及 dat 文件信息如下:
# Create an Abstract model
model = pyo.AbstractModel()
# Build parameters
model.Crop = pyo.Set()
model.w_labor = pyo.Param(model.Crop, within=pyo.PositiveReals)
model.w_capital = pyo.Param(model.Crop, within=pyo.PositiveReals)
model.profit = pyo.Param(model.Crop, within=pyo.PositiveReals)
model.avail_land = pyo.Param(within=pyo.PositiveReals)
model.avail_labor = pyo.Param(within=pyo.PositiveReals)
model.avail_capital = pyo.Param(within=pyo.PositiveReals)
# define objective function
def value_rule(model):
return sum( model.w_labor[i] + model.w_capital[i] + model.profit[i] for i in model.Crop )
model.value = pyo.Objective( rule=value_rule, sense=pyo.maximize )
# Build the constraint
def constraint_rule(model):
return sum(model.w_labor[i] + model.w_capital[i] + model.profit[i] for i in model.Crop) <= model.avail_capital
model.cost_constraint = pyo.Constraint(rule=constraint_rule)
数据文件:
data;
set Crop := Corn Soybeans Oats;
param: w_labor w_capital profit :=
Corn 6 36 40
Soybeans 6 24 30
Oats 2 18 20;
param avail_land := 12;
param avail_labor := 48;
param avail_capital := 360;
将其变成一个具体的问题非常简单,但我在这个抽象模型上不断遇到错误。我相信我的约束和/或目标存在根本性错误,但我不完全确定如何解决这个问题。如果有人可以提供帮助,我将不胜感激。
这显然是一个硬件问题,所以这里有一些提示:
您的模型中没有变量。没有什么可以解决的。我希望你需要一个变量,按作物索引来显示种植的作物。
我在你的问题陈述中看到了 3 个约束,但你只写了 1 个(这是荒谬的错误)。重新思考那些。
您应该从数据构建一个实例。代码在哪里?
构建实例后,打印并检查它。它看起来应该与问题陈述非常相似。
instance.pprint()
并检查。