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

AMPL线性约束构建求助:车队平均燃油效率约束实现疑问

问题解决:AMPL车队平均燃油效率线性约束实现

核心问题修正

先明确两处关键错误:

  • .mod文件中amount参数冗余:决策变量Make[c]才是实际生产数量,无需预先定义生产数量参数
  • .dat文件中fleet_eff定义错误:不能用模型变量(如Total_Cars)定义参数,且法规要求的车队平均效率是固定阈值参数,不是基于现有产量计算的值

修正后的.mod文件

删除冗余参数,编写线性化的效率约束:

# Set of cars we can produce
set CAR;

# Parameters 
param time {CAR} > 0;       # 生产单辆车耗时(小时)
param fac_time > 0;         # 下周可用工时
param profit {CAR} > 0;     # 单辆车利润
param lower {CAR} >= 0;     # 单车型最低产量要求
param fuel_eff {CAR} > 0;   # 单车型燃油效率
param fleet_avg > 0;        # 法规要求的最低车队平均燃油效率(固定阈值)

# 决策变量:各车型生产数量
var Make {c in CAR} >= lower[c];

# 目标函数:最大化总产量
maximize Total_Cars: sum {c in CAR} Make[c];

# 约束条件
s.t. Time: sum {c in CAR} time[c] * Make[c] = fac_time;
# 线性化的车队平均效率约束:总效率贡献 ≥ 平均阈值 × 总产量
s.t. Efficiency: sum {c in CAR} fuel_eff[c] * Make[c] >= fleet_avg * sum {c in CAR} Make[c];

修正后的.dat文件

补充缺失的燃油效率数值,替换错误的fleet_eff为固定阈值:

set CAR := T C L; 

param:  time    profit  lower   fuel_eff:=
    T   1       200     10      30
    C   2       500     20      40
    L   3       700     15      25;       
    
param fac_time := 120;
# 示例法规阈值,可根据题目要求修改
param fleet_avg := 32;

关键逻辑说明

  • 线性化原理:原平均效率约束为(sum(fuel_eff[c]*Make[c]) / sum(Make[c])) ≥ fleet_avg,因总产量sum(Make[c])为正数(所有Make[c]≥lower[c]且必有产量),两边同乘总产量后不等号方向不变,转化为纯线性约束,彻底避免变量相除
  • fleet_avg是题目给定的法规要求值,需在.dat文件中直接赋值,不能依赖模型变量计算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:15:33