当前位置: 首页 > 知识库问答 >
问题:

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

柴昆杰
2023-03-14

我对我正在编写的CPLEX代码有一些疑问。代码本身(模型)似乎写得很好,但在填充数据时,我有一个错误。注意:模型中没有约束,因为我正在尝试对模型进行一次尝试,只是为了看看它是否有效。

代码如下:

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);
};

以下是数据:

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>]

*注意:在行程时间(最后一个间隙值=5)之前的每个弧间隙中,必须是来自出发节点、到达节点和开始节点的数据,但未显示,我不知道为什么*

另一个疑问是:关于模型的约束,我不知道如何将它们写入CPLEX。

1) 开始时间

2) x*(到达时间(节点i)旅行时间)

3)将每辆卡车的可变到达时间初始化为0。(在模拟开始时)

4)每个到达节点的需求必须等于(所选弧*卡车容量)的总和

太谢谢你了。

共有1个答案

锺离正祥
2023-03-14

让我来帮助您理解语法。

在. mod中

备注:

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

因为它没有在.dat定义,并写入:

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

因为那一个在<代码>中。dat。

这个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]];

然后你将能够跑步,然后提高。

 类似资料:
  • 我已经删除了所有Azure虚拟机,现在我正在尝试从经典存储帐户中删除vhds容器存储blob。它给了我这个错误: Blob上当前有一个租约,请求中没有指定租约ID 我发现一篇文章提到了这个错误:https://blogs.technet.microsoft.com/thbrown/2015/04/04/there-is-currently-a-lease-on-the-blob-and-no-le

  • 我正试图在模拟器中运行一个应用程序,但收到以下错误消息: 我以前在谷歌搜索时没有看到任何关于这一点的参考。 该应用程序使用Xcode6测试版,在Swift中链接到一个Obj-C静态库。在设备上运行良好。 有什么想法吗?

  • 我试图使用Python、OpenCv2和LBPH实现人脸识别(从这里下载) 我的python版本是2.7.14 PIP版本是9.0.3 而OpenCV版本是3.4.0 我的代码是 当我运行任何人脸识别文件(如Recogniser\u Image\u All\u Algorithms.py)时,都会出现此错误 Traceback(最近的调用最后):文件Recogniser_Image_All_Alg

  • 为什么会出现以下情况 导致以下错误 无法将类型“m”与“IO”匹配。“m”是一个刚性类型变量,由类型签名绑定:foo::forall(m::*- 据我所知,既然IO()应该等于MonadIO,MonadIO约束不应该允许这样做吗?

  • 无法在 AnjularJS 应用程序中看到拖动的元素,即使执行了拖放操作且没有任何错误。 代码如下: 以下是执行和执行的不同方法,没有错误: 还执行了JavaScript方法:但是没有运气,它也执行没有错误,但无法执行拖放操作在UIenter图像描述在这里 上述所有方法和命令都是编译和执行的,没有任何错误,但无法在UI中执行拖放操作(请帮助)。 尝试了所有可能的组合,我知道任何人都可以让我知道我错

  • 显示APII错误的图像制作了一个静止的API,它正在操作文件,然后将文件上传到第三方,然后它将有两个数据库操作。第一个是选择,第二个是插入。 在少数情况下,我得到200,但在某些情况下,我得到400。现在,当我得到400时,控制只在选择方法之前出现,该方法没有错误。 所以,看起来请求正在获得超时或其他什么。有人能建议正确的方法吗?我应该在哪里更改超时? 成功日志-[2019-04-11 10:09