我在AMPL中需要解决以下问题,我尝试过,但是遇到了一些错误消息:SunTech Electronics在其城市工厂生产DVD刻录机。在接下来的四个时期中,对该产品的估计需求为3,000、8,000、5,000和2,000。在第一阶段初期,SunTech有50名工人。 SunTech花费1,500美元雇用一名工人,并花费5,000美元解雇一名工人。每个时期的工人工资为12,000美元。一个新雇用的工人每个时期最多可以记录50个记录器,而一个以前雇用的工人每个时期最多可以记录80个记录器。每台DVD刻录机的售价为295美元。将DVD刻录机存货一段时间需要15美元。假设在每个时期的开始雇用和解雇工人,并且在任何时期生产的产品都可以满足那个时期的需求。第1阶段开始时的库存为500。假定如果无法通过当前期间的当前库存或生产来满足需求,则损失需求。建立一个数学模型来确定每个时期的工人水平,以最大化SunTech的利润。
我的mod文件看起来像:
set PERIODS;
param demand{PERIODS};
var w{PERIODS}>=0; \\worker level at period j
var h{PERIODS}>=0; \\hiring level at period j
var l{PERIODS}>=0; \\lay-off level at period j
var s{PERIODS}>=0; \\amount we store at period j
var n{PERIODS}>=0; \\total recorders produced in period j
var x{PERIODS}>=0; \\recorders produced by new workers in period j
var y{PERIODS}>=0; \\recorders produced by old workers in period j
maximize profit: sum{j in PERIODS}(295*demand[j]-5000*l[j]-1500*h[j]-15*s[j]-12000*w[j]);
subject to w1: w[1]=50;
subject to s1: s[1]=500;
subject to h1: h[1]=0;
subject to l1: l[1]=0;
subject to storage{ j in PERIODS : j > 1 }:x[j]+y[j]- s[j-1] = demand[j]+ s[j];
subject to new_workers{j in PERIODS}: x[j] <= 50*h[j];
subject to old_workers{j in PERIODS : j> 1}: y[j] <= 80*(w[j-1] -l[j]);
subject to season1: x[1] <= 50*50;
subject to season1y : y[1] = 0;
subject to demands{j in PERIODS: j>1} :w[j-1] = w[j]- h[j]+l[j];
和我的.dat文件看起来像:
set PERIODS := 1 2 3 4;
param demand:=
1 3000
2 8000
3 5000
4 2000;
和我的.run文件看起来像:
model opthw.mod;
data opthw.dat;
option solver gurobi;
solve;
display profit;
display w;
这是我收到的错误消息:
(file opthw.run, line 4, offset 55):
error processing param demand:
2 invalid subscripts discarded:
demand[3000]
demand[5000]
Error at _cmdno 2 executing "solve" command
(file opthw.run, line 4, offset 55):
error processing objective profit:
no value for demand[1]
请协助,我看不到哪里出了问题
您的代码对我来说运行正常(将// s更改为#后,给出了利润= 1262500的最佳解决方案。
您可能会尝试的几件事:
reset;
,以防以前的运行遗留任何东西干扰运行(尽管从错误消息中,我认为这不是问题)display demand;
以检查其按需读取的内容。