AMPL初学者求助:代码为何出现语法错误?
问题分析与解决
核心语法错误原因
你的模型文件中,calories、proteins、calcium、vitaminA、cost这些参数被定义为无索引的标量参数(如param cost;),但在目标函数和约束中却试图用数组下标[f]来访问这些参数(如cost[f])。标量参数无法通过集合索引取值,这就是触发语法错误的直接原因。
修正后的模型代码
将模型中上述参数的定义修改为集合FOODS上的索引参数即可解决问题:
model: set FOODS; param calories{FOODS}; param proteins{FOODS}; param calcium{FOODS}; param vitaminA{FOODS}; param cost{FOODS}; param minCalories; param minProt; param minCalcium; param minVit; var x {FOODS} >=0; minimize prix: sum {f in FOODS} cost[f] * x[f]; subject to calories: sum {f in FOODS} calories[f] * x[f]>=minCalories; subject to proteins: sum {f in FOODS} proteins[f] * x[f]>=minProt; subject to vitaminA: sum {f in FOODS} vitaminA[f] * x[f]>=minVit; subject to calcium: sum {f in FOODS} calcium[f] * x[f]>=minCalcium;
补充说明
你的数据文件已经正确声明了这些参数是基于FOODS集合的数组(如param cost{FOODS};),但模型文件的参数定义必须和数据文件保持一致,AMPL才能正确关联集合与参数的对应关系。
内容的提问来源于stack exchange,提问作者Badro Dono
相关产品推荐
相关产品推荐

