cplex - CPLEX Ilog Studio 放宽了重要约束 - 未正确求解
问题描述
我是使用 CPLEX Studio 的新手。我使用的是学生版,因此不允许通过 IBM 支持记录问题。
我正在使用粘贴在下面的 cplex 问题。问题是 minedOnlyOnce 约束。这应该只挖掘一个块一次,但它会不止一次地挖掘一个块。
{int} TimePeriods =...;
{int} Blocks =...;
float value[Blocks] = ...;
float oreTons[Blocks] = ...;
float wasteTons[Blocks] = ...;
float resourceMaxCap =...;
float processMinCap =...;
tuple blockType {
int id;
int x;
int y;
int z;
};
{blockType} BlocksType = ...;
{blockType} Ontop[j in BlocksType] =
{i | i in BlocksType: j.z == i.z +1 &&
((j.x == i.x-1 ) ||
(j.x == i.x+1 ) ||
(j.x == i.x ) ) &&
((j.y == i.y-1 ) ||
(j.y == i.y+1 ) ||
(j.y == i.y ) ) };
dvar boolean schedule[Blocks][TimePeriods];
maximize
sum( b in Blocks, t in TimePeriods) ( value[b] * schedule[b][t] * 1/(1+0.1)^t );
subject to{
forall(b in Blocks) {
minedOnlyOnce :
sum( t in TimePeriods) (schedule[b][t]) <= 1;
}
forall( i in BlocksType,t in TimePeriods) {
BlocksOnTop :
sum(j in Ontop[i])(t) * schedule[i.id][t]-sum(j in Ontop[i])sum(r in TimePeriods : r <= t)(schedule[j.id][r]) <=0 ;
}
forall(t in TimePeriods) {
resourceAvailable :
sum(b in Blocks) (schedule[b][t]*oreTons[b]+schedule[b][t]*wasteTons[b]) <= resourceMaxCap;
}
forall(t in TimePeriods) {
minProcessFeed :
sum(b in Blocks)(schedule[b][t]*oreTons[b]) >= processMinCap;
}
}
SheetConnection sheet("3D_27block_data.xlsx");
BlocksType from SheetRead(sheet,"Data!A2:D28");
Blocks from SheetRead(sheet,"Data!A2:A28");
TimePeriods from SheetRead(sheet,"Data!O2:O4");
value from SheetRead(sheet,"Data!H2:H28");
oreTons from SheetRead(sheet,"Data!F2:F28");
wasteTons from SheetRead(sheet,"Data!G2:G28");
resourceMaxCap from SheetRead(sheet,"Data!P2:P4");
processMinCap from SheetRead(sheet,"Data!Q2:Q4");
schedule to SheetWrite(sheet,"Data!I2:K28");
解决方案
如果模型不可行,CPLEX 可以放宽标记的约束并给出放宽的解决方案。
如果你转
forall(b in Blocks) {
minedOnlyOnce :
sum( t in TimePeriods) (schedule[b][t]) <= 1;
}
进入
forall(b in Blocks) {
//minedOnlyOnce :
sum( t in TimePeriods) (schedule[b][t]) <= 1;
}
然后该约束将变成硬约束(不能放松的约束)
推荐阅读
- javascript - 我如何在 react-native 中翻转图像?
- c++ - 使用 apt-get 安装时 Boost Testing 编译错误
- csv - 从 GAN 模型导出到 CSV
- javascript - 将table1中的列名和编号复制到table2
- github - 我可以直接在 Github 上编辑 html 文件吗(在我的浏览器上,而不是桌面上)?
- typescript - 在 TypeScript 中获取类型键
- html - Jekyll:不在 CSS 中的 div 类
- r - 如何让 R 使用 scan() 函数读取 DAT 文件?
- sql - SQL Server 格式化函数
- c++ - 为初学者阅读 C++ 文件所需的建议