Cplex: определение переменных с ограничениями - PullRequest
0 голосов
/ 30 мая 2018

Я очень новичок в программировании, но я работаю над моделью назначения медсестры в Cplex Optimization.Первое назначение должно обеспечить начальное выполнимое решение.

Для этого я уже определил переменные медсестер, случаев и ролей.

int i =  ... ;
range nurses = 1..n ;               // Set of available nurses

{string} roles  = ... ;             // Set of roles that are required for each surgery

int c = ... ;
range cases = 1..c ;                    // Set of cases scheduled for surgery n the current day

int cc = ... ;
range overlapcases = 1..cc ;            // Overlapping cases

Теперь я хочу определить параметры (E равноepsilon):

P10 [i] [c] [k]: 1, если медсестра iEI может выполнять роль kEK для случая cEC, в противном случае O

ST [c]: время начала случая cEC

ET [c]: время окончания кейса cEC

P11 [c] [cc]: 1, если cEC кейса и ccEC кейса перекрываются, 0 в противном случае

Как я могусформулировать / определить эти параметры, чтобы получить результаты от CPLEX?Или я должен записать результаты в файл данных?

На самом деле у меня нет данных для этой проблемы.Все данные будут мнимыми.Я думаю, мне нужно написать данные для времени начала и окончания, но я не знаю, как обращаться с P10, P11.

Моя идея была (и я знаю, что она не работает):

boolean P10 [nurses][roles][cases] ;            // Amount of suitable nurses
int ST [cases] = ... ;
int ET [cases] = ... ;
boolean P11 [cases][overlapcases] ;

Есть здесь кто-нибудь, кто мог бы мне помочь?Заранее большое спасибо.Привет.

1 Ответ

0 голосов
/ 31 мая 2018

для чтения из .dat приведу небольшой пример

.mod

{string} nurses=...;
{string} roles=...;
{string} cases=...;
{string} overlapcases=...;

int P10 [nurses][roles][cases]=... ;            // Amount of suitable nurses
int ST [cases] = ... ;
int ET [cases] = ... ;
int P11 [cases][overlapcases] =...;

.dat

nurses={"Ann","Mary"};
roles={"A","B"};
cases={"C1","C2"};
overlapcases={"D1"};

P10= [[[1 0][0 1]][[1 0][0 1]]];            
ST  =[1,10] ;
ET  = [4,12];
P11 =[[1]];

regards

PS: у вас есть много примеров в продукте CPLEX и даже пример медсестры

...