등 거리 매트릭스에서 CP schedulling 문제

0

질문

고 싶어를 추가하려고 하거리 매트릭스는 간단한 일정에서 문제가 CPLEX 를 사용하여 CP 그러나를 관리할 수 없습니다 이지 않고 오류를 내는 새로운 dvar 시퀀스입니다.

를 포함한 설정 시간 사이의 제품은 1,2 및 3 에 따라 달라지는 순서는 제품이 예정되어 있습니다. 설치한 다른 시퀀스에 주어진 distancematrix.나의 거리를 정의 행렬로 튜플 삼중에서 모 파일로 매트릭스에서 dat 파일이지만 모두 옵션 작동하지 않습니다.

새로운 설정 dvar 시퀀스에 대한 이 설정 시간이라는 설정해야를 대표의 순서 모든 작업 J 여부를 테스트합니다. 그러나 나는 오류 메시지가'기능 noOverlap dvarsequence,[범위][범위]가 존재하지 않습니다. 내가 이해하지 못하는 내가 뭘 잘못 때문에,나는 정의 dvar 서열과 매트릭스에 그래서 나의 이해를 작동해야

수 있는 누군가가 나를 도울까요? 와 함께 붙어 이 문제입니다.

찾아주세요 아래에 있습니다. 고 dat. 파일이 있습니다.

사전에 감사합니다! mod.


using CP;

// Number of Machines (Packing + Manufacturing)
int nbMachines = ...;
range Machines = 1..nbMachines;

// Number of Jobs
int nbJobs = ...;
range Jobs = 1..nbJobs;

int duration[Jobs,Machines] = ...;

int release = ...;
int due     = ...;

int distanceMatrix[1..nbJobs][1..nbJobs] = ...;
 
dvar interval task[j in Jobs] in release..due;
dvar interval opttask[j in Jobs][m in Machines] optional size duration[j][m];

dvar sequence tool[m in Machines] in all(j in Jobs) opttask[j][m];
dvar sequence setup[j in Jobs] in all (m in Machines,j in Jobs)opttask[j][m];      

execute {
        cp.param.FailLimit = 5000;
}


// Minimize the total processing cost (24)

 dexpr int day = sum(j in Jobs, m in Machines) duration[j][m] * presenceOf(opttask[j][m]);
 minimize  day;
subject to {
  // Each job needs one unary resource of the alternative set s (28)
  forall(j in Jobs){
    alternative(task[j], all(m in Machines) opttask[j][m]);
     noOverlap(setup[j],distanceMatrix);
   }     
  // No overlap on machines
   forall(m in Machines){
     noOverlap(tool[m]);
   }     
  // forall(m in Machines,j in Jobs)
     
};

execute {
  writeln(task);
};
 

dat.

nbMachines = 2;

nbJobs = 3;

duration = [
        [5,1], 
        [3,4],
        [5,7]
            ];

release = 1;

due = 30;

distanceMatrix = [
1:[0,2,0],
2:[4,0,6],
3:[0,2,0]
]};
1

최고의 응답

1

당신이 돌아야 합리 매트릭스 튜플로 설정합니다.

예를 참조하십시오에서 는 방법으로 OPL?

TSP(외판원 문제)에서 OPL 으로 예약,제약 조건과 함께 프로그래밍,또는 제거 회로 및 MTZ

using CP; 
int     n       = ...;
range   Cities  = 1..n;

int realCity[i in 1..n+1]=(i<=n)?i:1;



// Edges -- sparse set
tuple       edge        {int i; int j;}
setof(edge) Edges       = {<i,j> | ordered i,j in 1..n};
setof(edge) Edges2       = {<i,j> | i,j in 1..n+1};  // node n+1 is node 1

int         dist[Edges] = ...;
int         dist2[<i,j> in Edges2]=(realCity[i]==realCity[j])?0:
((realCity[i]<realCity[j])?dist[<realCity[i],realCity[j]>]:dist[<realCity[j],realCity[i]>]);


dvar interval itvs[1..n+1] size 1;


dvar sequence seq in all(i in 1..n+1) itvs[i]; 

execute
{

cp.param.TimeLimit=60;
var f = cp.factory;
  cp.setSearchPhases(f.searchPhase(seq));
}

tuple triplet { int c1; int c2; int d; };
{triplet} Dist = { 
    <i-1,j-1,dist2[<i ,j >]>
           |  i,j in 1..n+1};
           
           
minimize endOf(itvs[n+1]) - (n+1);           
subject to
{
    startOf(itvs[1])==0; // break sym
    noOverlap(seq,Dist,true);   // nooverlap with a distance matrix
    last(seq, itvs[n+1]); // last node
}
2021-11-20 18:49:09

나를 구성하는 tuple 설정뿐만 아니라,그러나 궁금해했다면 그것을 건설하기 위하여 가능하다는 튜플 삼중 작업과 정의의 문자열로{int loc1;int loc2;int value;};{삼중}transitionTimes={<i,j,ftoi(abs(난 j))>|내에서의 작업,j 에서 작업};면 작업으로 정의 문자열 작업을={"케첩","마요","바베큐","KetchLight"}; 또는 튜플 세트만으로 구성되지 않는 문자열 형식?
Willem B

문서를 말한다:는 선택적인 전환을 매트릭스 M(의 형태로 음수가 아닌 정수 tuple 설정)전달할 수 있 noOverlap 제약 조건을 의미하는 아이 앞에 나타나 aj 시퀀스에서,그 최소한의 거리를 M[typei,typej]는 존중되어야의 인공 지능의 시작 aj(typei 및 typej 표시의 형식 ai 및 aj 시퀀스에서).
Alex Fleischer

감사 알렉스! 나는 이제 어떻게 설정할 수 있습니다 나 자신의 튜플을 사용하여 정수만! 그럼에도 불구하고 빠르게 액세스할 수 있습니를 구성하는 튜플에 대해 설정변화 행렬에 대해서 다루게 교체,int loc1 및 int loc2 과(문자열 job1 과 문자열인 job2 의),난류에서 noOVerlap 라인:인수 유형의 불일치를 호출 기능 noOverlap(dvar 시퀀스,{튜플 유형}):boolean 과 함께 인수를 dvar 시퀀스,{매트릭스}'. 이 뜻은 나를 사용할 수 있습 튜플을 설정하는 존재하의 음수가 아닌 정수의 모든 부분에 대한 tuple? 그것은 아직 완전히 명확하게 할 수 있습니다.당신은 어쩌면 확인 이?
Willem B

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................