You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AMPL代码执行报错:Assingment_3.mod第11行存在语法错误求助

解决AMPL代码语法错误的方案

错误根源

代码里的reset;语句位置错误——它会清除所有之前的AMPL定义,包括你刚定义的BOXES集合。后续定义Volume参数时,试图用1-8这些BOXES的元素作为索引,但此时BOXES已被清除,解析器无法识别这些索引值,直接触发语法错误。

修复方法

要么删除reset;语句,要么将它移到代码最开头(如果确实需要清除之前的定义),确保集合定义在reset操作之后。

修复后的完整代码

# 可选:清除之前的AMPL定义,放在代码开头
reset;

# 定义箱子集合
set BOXES := 1..8;

set TRUCKS := 1..2;

param Volume := 
1 30
2 60
3 70
4 20
5 10
6 10
7 50
8 50;

param Priority :=
1 2 # 箱子1优先级2(食品)
2 3 # 箱子2优先级3(紧急)
3 2 # 箱子3优先级2(食品)
4 2 # 箱子4优先级2(食品)
5 3 # 箱子5优先级3(紧急)
6 3 # 箱子6优先级3(紧急)
7 1 # 箱子7优先级1(普通)
8 4; # 箱子8优先级4(紧急食品)

var x{BOXES, TRUCKS} binary;

maximize TotalPriority: sum{i in BOXES, j in TRUCKS} Priority[i] * x[i,j];

subject to VolumeConstraint{j in TRUCKS}: 
    140 <= sum{i in BOXES} Volume[i] * x[i,j] <= 160;

subject to OneTruckEach{i in BOXES}: 
    sum{j in TRUCKS} x[i,j] = 1;

额外提示

  • 若必须使用reset;,务必将其放在所有集合、参数定义的最前面,避免刚定义的元素被清除后无法引用。
  • AMPL中参数的索引依赖已存在的集合,因此集合定义必须在使用其元素的参数之前。

内容的提问来源于stack exchange,提问作者Heloise Carrer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 13:42:48