Я новичок в использовании 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");