this repo has no description
1/*** 2!Test 3expected: 4- !Result 5 solution: !Solution 6 items: 7 - [0, 0, 0] 8 - [0, 0, 0] 9 - [0, 0, 0] 10 - [0, 0, 0] 11 - [0, 0, 2] 12 - [0, 2, 0] 13 - [1, 0, 1] 14 - [1, 0, 1] 15 obj: 4 16 objective: 4 17 pieces: [0, 0, 0, 0, 1, 1, 1, 1] 18- !Result 19 solution: !Solution 20 items: 21 - [0, 0, 3] 22 - [0, 2, 0] 23 - [1, 0, 1] 24 - [1, 0, 1] 25 - [0, 0, 0] 26 - [0, 0, 0] 27 - [0, 0, 0] 28 - [0, 0, 0] 29 obj: 4 30 objective: 4 31 pieces: [1, 1, 1, 1, 0, 0, 0, 0] 32***/ 33 34%------------------------------------------------------------------------------% 35% cutstock.mzn 36% Jakob Puchinger <jakobp@cs.mu.oz.au> 37% December 2007 38% vim: ft=zinc ts=4 sw=4 et tw=0 39% 40% The cutting stock problem: Kantorovitch formulation for colgen. 41% 42%------------------------------------------------------------------------------% 43 44int: L; % stock length 45int: K; % upper bound on number of stock pieces 46int: N; % number of stock pieces 47 48array[1..N] of int: i_length; 49array[1..N] of int: i_demand; 50 51array[1..K] of var 0..1: pieces; 52array[1..K, 1..N] of var int: items; 53 54constraint 55 forall(k in 1..K, i in 1..N)( items[k,i] >=0 ); 56 57solve ::int_search(array1d(1..K*N,items)++pieces,input_order,indomain_min,complete) minimize 58 sum([ pieces[k] | k in 1..K]); 59 60constraint 61 forall(i in 1..N) 62 ( 63 sum( [ items[k, i] | k in 1..K] ) >= i_demand[i] 64 ); 65 66constraint 67 forall( k in 1..K ) ( 68 sum(i in 1..N)( items[k,i] * i_length[i] ) <= pieces[k] * L 69 ); 70 71 % required for showing the objective function 72var int: obj; 73constraint 74 obj = sum([ pieces[k] | k in 1..K]); 75 76output 77[ "Cost = ", show( obj ), "\n" ] ++ 78[ "Pieces = \n\t" ] ++ [show(pieces)] ++ [ "\n" ] ++ 79[ "Items = \n\t" ] ++ 80[ show(items[k, i]) ++ if k = K then "\n\t" else " " endif | 81 i in 1..N, k in 1..K ] ++ 82[ "\n" ]; 83 84 85% data: 86N = 3; 87K = sum(i_demand); 88L = 10; 89i_length = [7, 5, 3]; 90i_demand = [2, 2, 4]; 91