首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CPLEX收入最大化

CPLEX收入最大化
EN

Stack Overflow用户
提问于 2019-11-29 14:58:29
回答 1查看 123关注 0票数 0

我正在做一个关于cplex的项目,情况是这样的:

  • 是一家化工厂,生产和销售了2种最终产品
  • ,每个反应器有3个反应器,每个反应器可以执行不同的任务,每个反应器的目标函数使总利润
  • 最大化。解决方案给出了为该objF计算的值,并显示了每个反应器的激活顺序,以及每个循环

的利润。

问题:现在我可以选择再增加一个反应堆(它可以是三个反应堆中的任何一个,每个都有不同的价格),或者根本不买一个。

目标保持不变:最大化收入,而且我似乎无法将此决定放入代码中,因此我可以获得最佳的案例场景结果,因为:

  • 利润和成本(可再生资源(反应物))取决于r生产,t时间
  • InitialStock也取决于反应堆的数量,因此它将取决于多少反应堆运行的决定,这取决于每个案例的最大收入
  • 这是我的第一个项目:S

代码语言:javascript
运行
复制
// Data Declaration

int MaxTime = ...;
range Time = 0..MaxTime;
{int} Tasks = ...;
{string} nrenuableR=...;
{string} renuableR=...;
{string} renuableRusedbyT[Tasks]=...;
{string} Resources= nrenuableR union renuableR;
int procTime[Tasks]= ...;

int minbatchsize[renuableR][Tasks] =...;
int maxbatchsize [renuableR][Tasks] =...;

int MaxAmountStock_nR[nrenuableR]=...;
int maxRenuableR[renuableR][Time] =...;
int InitialStock[Resources]=...;

int Profit[nrenuableR]=...;
float nRcosts[nrenuableR]=...;

int MaxTheta = ...;
range Theta=0..MaxTheta;
float Mu[Tasks][Resources][Theta] = ...;
float Nu[Tasks][Resources][Theta] = ...;


//Decision Variables

dvar boolean N[Tasks][Time];
dvar float+ Csi[Tasks][Time];
dvar int+ R[Resources][Time];

//Objective Function

dexpr float ObjFunction = sum (r in nrenuableR)(R[r][MaxTime] - InitialStock[r])*(Profit[r] - nRcosts[r]); 

maximize ObjFunction;


//Contraints
subject to {


//Resources Capacity
forall (r in renuableR) forall(t in Time) R[r][t] <= maxRenuableR[r][t];
forall (r in nrenuableR) forall (t in Time) R[r][t] <= MaxAmountStock_nR[r];

//Batch Size + linking constraints
forall (k in Tasks, r in renuableRusedbyT[k], t in Time) minbatchsize[r][k] * N[k][t] <= Csi[k][t];
forall (k in Tasks, r in renuableRusedbyT[k], t in Time) maxbatchsize[r][k]*N[k][t] >= Csi[k][t];

//Resource Balance
forall(r in Resources) R[r][0] == InitialStock[r] + sum(k in Tasks) (Mu[k][r][0] * N[k][0] + Nu[k][r][0] * Csi[k][0]);
forall(r in Resources,t in Time: t>0) R[r][t] == R[r][t-1] + sum(k in Tasks,theta in Theta: t - theta >=0) (Mu[k][r][theta] * N[k][t - theta] + Nu[k][r][theta] * Csi[k][t - theta]);
 }
EN

Stack Overflow用户

发布于 2019-12-09 08:50:47

我不清楚你的决定变量的含义,所以我不能给出一个详细的答案。

扩展该模型的一个一般方法是:

  • 为每个反应堆创建了一个新的决策变量IsUsed,当且仅当使用了相应的反应堆。
  • 添加了一个约束,即如果反应堆的IsUsed为0,那么在该反应堆上执行的任务数为0。在目标函数中,
  • 为每个反应堆添加了一个术语IsUsed * Cost,用于每个反应堆的开放成本模型。

H 110对于初始库存,您可以将初始库存乘以每个反应堆的IsUsed。如果没有使用反应堆,则初始存量为0,如果使用反应堆,则为原始初始存量。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59107053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档