Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мезенцев Имитационное моделирование / Лаба 4 по Мезе вариант 5.docx
Скачиваний:
58
Добавлен:
04.01.2020
Размер:
427.38 Кб
Скачать

Файл IndSas.Dat

/*********************************************

* OPL 12.6.2 Data

* Creation Date: 24.12.2015 at 10:32:40

*********************************************/

n = 19;

m = 27;

m1 = 9;

n1 = 10;

SheetConnection sheet("ind.xls");

A1 from SheetRead(sheet,"SAS!b4:k12");

A2 from SheetRead(sheet,"SAS!b13:k30");

A3 from SheetRead(sheet,"SAS!l13:t30");

b1 from SheetRead(sheet,"SAS!v4:v12");

b2 from SheetRead(sheet,"SAS!v13:v30");

z1 from SheetRead(sheet,"SAS!b31:k31");

z2 from SheetRead(sheet,"SAS!l31:t31");

x to SheetWrite(sheet,"SAS!b3:k3");

w to SheetWrite(sheet,"SAS!l3:t3");

В данном файле описываются все данные, которые понадобятся во время решения программы. SheetCоnnectiоn – операция, связывающая таблицу Excel с переменной. SheetReаd – процедура для чтения данных с выбранной таблицы, выбранной страницы и выбранного интервала. SheetWrite – процедура для записи значения в таблицу.

Файл IndSas.Mod

/*********************************************

* OPL 12.6.2 Model

* Creation Date: 24.12.2015 at 10:32:40

*********************************************/

int n = ...;

int m = ...;

int m1 = ...;

int n1 = ...;

int m2 = m - m1;

int n2 = n - n1;

range j1 = 1..n1;

range j2 = 1..n2;

range i1 = 1..m1;

range i2 = 1..m2;

float b1[i1] = ...;

float b2[i2] = ...;

float z1[j1] = ...;

float z2[j2] = ...;

float A3[i2][j2] = ...;

float A1[i1][j1] = ...;

float A2[i2][j1] = ...;

float MaxValue = 1000*max(r in i2) b2[r];

dvar float x[j1] in 0..MaxValue;

dvar boolean w[j2];

minimize

sum(jj in j1) z1[jj] * x[jj] +

sum(jjj in j2) z2[jjj] * w[jjj] ;

subject to {

forall( r1 in i1 )

ct1:

sum( jj in j1)

A1[r1][jj] * x[jj] <= b1[r1];

forall( r in i2 )

ct2:

sum( jj in j1 )

A2[r][jj] * x[jj] +

sum( jjj in j2)

A3[r][jjj] * w[jjj] <= b2[r];

}

В результате работы получаем решение в IBM ILоg и Excel, которое показано на рисунке 4.

Решение в IBM ILоg CPLEX:

// solution (optimal) with objective 68

x = [0

10 53 15 35 53 0 15 35 68];

w = [0 0 1 1 1 0 0 1 0];

IBM ILоg CP:

Файл JSP.dat

/*********************************************

* OPL 12.6.2.0 Model

* Creation Date: 24.12.2015 at 18:28:34 *********************************************/

CJobs = 3;

CMachines = 3;

Ops = [

[ <1,10>, <0,25>, <1,5> ],

[ <2,15>, <1,18>, <0,15> ],

[ <2,15>, <1,20>, <0,15> ]

];

Файл JSP.mod

/*********************************************

* OPL 12.6.2.0 Model

* Creation Date: 24.12.2015 at 18:28:34 *********************************************/

using CP;

int CJobs = ...;//Работы

int CMachines = ...;//Станки

range Jobs = 0..CJobs-1;

range Mchs = 0..CMachines-1;// Mchs используется для индекса станков

tuple Operation {

int mch; // Станок

int pt; // Время в процессе

};

Operation Ops[j in Jobs][m in Mchs] = ...; //индексы j и m

dvar interval itvs[j in Jobs][o in Mchs] size Ops[j][o].pt; //динамическая переменная Интервал

dvar sequence mchs[m in Mchs] in all(j in Jobs, o in Mchs : Ops[j][o].mch == m) itvs[j][o];//последовательности

execute {

cp.param.FailLimit = 10000;

}

minimize max(j in Jobs) endOf(itvs[j][CMachines-1]);

subject to {

forall (m in Mchs)

noOverlap(mchs[m]);

forall (j in Jobs, o in 0..CMachines-2)

endBeforeStart(itvs[j][o], itvs[j][o+1]);

}

execute {

for (var j = 0; j <= CJobs-1; j++) {

for (var o = 0; o <= CMachines-1; o++) {

write(itvs[j][o].start + " ");

}

writeln("");

}

}

Решение в IBM ILоg CP:

// solution with objective 68

itvs = [[<1 0 10 10>

<1 10 35 25> <1 53 58 5>]

[<1 15 30 15> <1 35 53 18> <1 53 68 15>]

[<1 0 15 15> <1 15 35 20> <1 35 50 15>]];

mchs = [{<"itvs[0][1]" 0 0 0 10 35 25>

<"itvs[1][2]" 1 1 1 53 68 15>} {

<"itvs[0][0]" 0 0 0 0 10 10>

<"itvs[2][1]" 1 3 1 15 35 20>

<"itvs[1][1]" 2 2 2 35 53 18>

<"itvs[0][2]" 3 1 3 53 58 5>} {

<"itvs[2][0]" 0 1 0 0 15 15>

<"itvs[1][0]" 1 0 1 15 30 15>}];