Download
% Licenced under CC-BY-4.0 : http://creativecommons.org/licenses/by/4.0/
MAIN MODEL Main_Langford
DECLARATION SECTION
MATHEMATICAL PROGRAM:
identifier : LangfordPlan
direction : minimize
constraints : AllConstraints
variables : AllVariables
type : CSP ;
PARAMETER:
identifier : k
initial data : 8 ;
PARAMETER:
identifier : k2
definition : k*2 ;
SET:
identifier : jj
subset of : Integers
index : j
definition : {1..k2} ;
SET:
identifier : ii
subset of : Integers
index : i
definition : {1..k} ;
ELEMENT VARIABLE:
identifier : position
index domain : (j)
range : jj ;
ELEMENT VARIABLE:
identifier : solution
index domain : j
range : ii ;
CONSTRAINT:
identifier : pos1
index domain : j |j <= k
definition : position(j) + j+1 = position(j+k)
comment : "Note the index domain." ;
CONSTRAINT:
identifier : pos2
index domain : (i)
definition : solution(position(i)) = i ;
CONSTRAINT:
identifier : pos3
index domain : j |j <= k
definition : solution(position(k+j)) = j
comment : "Note the index domain." ;
CONSTRAINT:
identifier : alldiff_position
definition : cp::AllDifferent(j, position(j)) ;
CONSTRAINT:
identifier : symm1
definition : solution(1) > solution(k2) ;
ENDSECTION ;
PROCEDURE
identifier : MainInitialization
ENDPROCEDURE ;
PROCEDURE
identifier : MainExecution
body :
ShowProgressWindow;
solve LangfordPlan;
if (LangfordPlan.ProgramStatus <> 'Optimal') then
empty solution, position;
endif;
DialogMessage(GMP::Solution::Count('LangfordPlan'));
ENDPROCEDURE ;
PROCEDURE
identifier : MainTermination
body :
return DataManagementExit();
ENDPROCEDURE ;
ENDMODEL Main_Langford ;