简体   繁体   English

即使代码没有错误,我也无法模拟 CPLEX 模型

[英]I can't simulate a CPLEX model even when the code has no errors

i have some doubts related to a CPLEX code that i'm trying to write.我对我正在尝试编写的 CPLEX 代码有一些疑问。 The code itself (model) seems to be well written, but when it comes to fill the data i have an error.代码本身(模型)似乎写得很好,但是在填充数据时出现错误。 NOTE: there are no constraints in the model because i'm trying to make a trial of the model just to see that it works.注意:模型中没有任何限制,因为我正在尝试对模型进行试用,只是为了看看它是否有效。

Here is the code:这是代码:

 using CP; // NETWORK+PARAMETERS int trucks=...; // set of trucks range truck= 1..trucks; int capacity [truck]=...; // capacity of a truck tuple nodeinfo { string name; // name of a node int starttime; // available start time int endtime; // available end time float demand; // demand from a node } {nodeinfo} departurenode=...; //size=4 {nodeinfo} arrivalnode=...; //size=4 {nodeinfo} startingnode=...; //size=4 // OPTION 2: vector of nodes //each node has tuple structure nodeinfo //length of the vector is length of dataset //read data from dataset //void* node = new {nodeinfo} [k]; tuple arc { nodeinfo departurenode; //departure node of an arc nodeinfo arrivalnode; // arrival node of an arc nodeinfo startingnode; // starting node of an arc int traveltime; // travel time of an arc } {arc} arcs=...; //number of arcs (24) float cost [arcs][truck]; //cost of using an arc by a truck // option2: int arc[i in departurenode,j in arrivalnode,k in startingnode]=...; //arcs (size=24) // how can i create a setof arcs taking into account the info from each arc?? // VARIABLES dvar boolean x [arcs,truck]; // 1 if truck uses the arc, 0 otherwise (array of size 24x7) dvar int+ arrivaltime [arrivalnode,truck]; //arrival time of a truck at a node (array size of 4x7) // OBJECTIVE FUNCTION dexpr float totalcost = sum (i in arcs, j in truck) x [i,j] * cost [i,j]; minimize totalcost; // CONSTRAINTS subject to {} execute { writeln(arcs); };

Here is the data:这是数据:

 trucks= 2; departurenode= [[A,0,10000,0],[B,0,10000,0],[C,0,10000,10],[D,0,10000,10]]; arrivalnode= [[A,0,10000,0],[B,0,10000,0],[C,0,10000,10],[D,0,10000,10]]; startingnode=[[A,0,10000,0],[B,0,10000,0],[C,0,10000,10],[D,0,10000,10]]; arcs= [[<A,0,10000,0>,<A,0,10000,0>,<C,0,10000,10>,5], [<A,0,10000,0>,<A,0,10000,0>,<D,0,10000,10>,5], [<B,0,10000,0>,<B,0,10000,0>,<C,0,10000,10>,5], [<B,0,10000,0>,<B,0,10000,0>,<D,0,10000,10>,5], [<C,0,10000,0>,<C,0,10000,0>,<A,0,10000,10>,5], [<C,0,10000,0>,<C,0,10000,0>,<B,0,10000,10>,5], [<D,0,10000,0>,<D,0,10000,0>,<A,0,10000,10>,5], [<D,0,10000,0>,<D,0,10000,0>,<B,0,10000,10>,5]] cost= [<1,1>,<1,1>,<1,1>,<1,1>,<1,1>,<1,1>,<1,1>,<1,1>]

*NOTE: in each gap of the arc before the travel time (last gap value=5) must be the data from departurenode, arrival node and startingnode but it's not shown and i don't know why * *注意:在旅行时间之前的弧的每个间隙(最后间隙值= 5)必须是来自出发节点、到达节点和起始节点的数据,但它没有显示,我不知道为什么*

Another doubt: regarding the constraints of the model i don't know how to write them into CPLEX.另一个疑问:关于模型的约束,我不知道如何将它们写入 CPLEX。

1) starttime <= arrivaltime <= endtime //(for each arrivalnode) 1) 开始时间 <= 到达时间 <= 结束时间 //(对于每个到达节点)

2) x * (arrivaltime (node i) + traveltime) <= arrivaltime (node j) 2) x *(到达时间(节点 i)+ 旅行时间)<= 到达时间(节点 j)

3) Initialize the variable arrivaltime for each truck to 0. (at the beginning of the simulation) 3)将每辆卡车的到达时间变量初始化为0。(模拟开始时)

4)The demand for each arrival node has to be equal to the sum of (the arcs chosen * capacity of the truck) 4)每个到达节点的需求必须等于(选择的弧线*卡车的容量)

Thank you so much.非常感谢。

Let me help you with the syntax.让我帮助您了解语法。

In the .mod在 .mod 中

Comment:评论:

//int capacity [truck]=...; // capacity of a truck

since that's not defined in the .因为在 . dat , and write: dat ,然后写:

float cost [arcs][truck]=...;

since that one is in the .dat .因为那个在.dat

The .dat should be changed into: .dat 应更改为:

trucks= 2;

 departurenode= {<A,0,10000,0>,<B,0,10000,0>,<C,0,10000,10>,<D,0,10000,10>};

 arrivalnode= {<A,0,10000,0>,<B,0,10000,0>,<C,0,10000,10>,<D,0,10000,10>};

 startingnode={<A,0,10000,0>,<B,0,10000,0>,<C,0,10000,10>,<D,0,10000,10>};

 arcs= {<<A,0,10000,0>,<A,0,10000,0>,<C,0,10000,10>,5>, <<A,0,10000,0>,<A,0,10000,0>,<D,0,10000,10>,5>,
 <<B,0,10000,0>,<B,0,10000,0>,<C,0,10000,10>,5>, <<B,0,10000,0>,<B,0,10000,0>,<D,0,10000,10>,5>,
 <<C,0,10000,0>,<C,0,10000,0>,<A,0,10000,10>,5>, <<C,0,10000,0>,<C,0,10000,0>,<B,0,10000,10>,5>,
 <<D,0,10000,0>,<D,0,10000,0>,<A,0,10000,10>,5>, <<D,0,10000,0>,<D,0,10000,0>,<B,0,10000,10>,5>};

 cost= [[1,1],[1,1],[1,1],[1,1],[1,1],[1,1],[1,1],[1,1]];

and then you will be able to run and then improve.然后你就可以跑起来然后进步了。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM