git-subtree-dir: software/minizinc git-subtree-split: 4f10c82056ffcb1041d7ffef29d77a7eef92cf76
63 lines
2.0 KiB
MiniZinc
63 lines
2.0 KiB
MiniZinc
/***
|
|
!Test
|
|
solvers: [gecode]
|
|
expected: !Result
|
|
status: OPTIMAL_SOLUTION
|
|
solution: !Solution
|
|
aCostSupport: 0
|
|
mdl8_Z: 0
|
|
***/
|
|
|
|
%%%%%% Regression test for the "missing builtin mzn_in_root_context" resolved @227ce089
|
|
|
|
int: nOBJCOEFDIVISOR__MIP = 10000; %%% Objective coefficient divisor to adapt magnitude in MIP
|
|
int: nOBJCOEFDIVISOR__CP = 1000; %%% Objective coefficient divisor to adapt magnitude in CP
|
|
int: nOBJLENGTHDISCR = 1000; %%% Length measure discretizer to improve objective precision (in CP)
|
|
|
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CONSTRAINTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
|
|
|
|
function var int: CostScaledByDiscrLength(var int: L, float: unit_cost, float: costDivisor, float: lengthDiscr) =
|
|
CostScaledByDiscrLength__useDIV(L, unit_cost, costDivisor, lengthDiscr);
|
|
|
|
function var int: CostScaledByDiscrLength__useDIV(var int: L, float: unit_cost, float: costDivisor, float: lengthDiscr) =
|
|
let {
|
|
int: lengthDiscrCeil = ceil(lengthDiscr);
|
|
} in
|
|
((L + lengthDiscrCeil - 1) div lengthDiscrCeil) * ceil(unit_cost * lengthDiscrCeil / costDivisor);
|
|
|
|
function var int: CostScaledByDiscrLength__useMULT(var int: L, float: unit_cost, float: costDivisor, float: lengthDiscr) =
|
|
let {
|
|
var int: L_scaled; %% Manual decomp: OR-TOOLS 8.0.8 says "TIMEOUT, unknown"
|
|
int: lengthDiscrCeil = ceil(lengthDiscr); %% But it could be better, as suggested by Gurobi
|
|
constraint L <= %% Assume L is minimized
|
|
L_scaled * lengthDiscrCeil
|
|
;
|
|
} in
|
|
L_scaled * ceil(unit_cost * lengthDiscrCeil / costDivisor);
|
|
|
|
|
|
%%%%%%%%%%%%%%%% SUPPORT COSTS %%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
var 0..1000000000: aCostSupport;
|
|
var 0..0: mdl8_Z;
|
|
constraint
|
|
aCostSupport >= CostScaledByDiscrLength( mdl8_Z,
|
|
42240, nOBJCOEFDIVISOR__CP, nOBJLENGTHDISCR )
|
|
;
|
|
|
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SOLVE + OBJECTIVE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
|
|
solve
|
|
minimize
|
|
aCostSupport;
|
|
|
|
|