首页 > 解决方案 > 将 AMPL 模型转换为 ORTools

问题描述

我正在尝试将我的 AMPL 模型转换为 ORTools。这是模型:

set NUTR;
set FOOD;

param cost {FOOD} > 0;
param f_min {FOOD} >= 0;
param f_max {j in FOOD} >= f_min[j];

param n_min {NUTR} >= 0;
param n_max {i in NUTR} >= n_min[i];

param amt {NUTR,FOOD} >= 0;

var Buy {j in FOOD} >= f_min[j], <= f_max[j];

minimize Total_Cost:  sum {j in FOOD} cost[j] * Buy[j];

subject to Diet {i in NUTR}:
   n_min[i] <= sum {j in FOOD} amt[i,j] * Buy[j] <= n_max[i];

这是我的 ORTools 的半 Python 代码。我不知道 Buy 是否正确以及如何添加约束:

Buy = {}
for f_ in FOOD:
    Buy[f_] = solver.IntVar(0, 1000, 'Buy[%s]' % (f_,))


##  Objective Function
Total_Cost = solver.Sum([cost[j_] * Buy[j_] for j_ in FOOD])



##  Constraints
for i in NUTR:
    for j in FOOD:
        print(amt[i,j] *Buy[j])
        #solver.Add( solver.Sum(amt[i,j] * Buy[j] <= n_max[i]  ))

solver.Minimize(Total_Cost)

标签: pythonor-toolsampl

解决方案


错误的括号

  solver.Add( solver.Sum(amt[i,j] * Buy[j]) <= n_max[i] )

推荐阅读