(!**************************************************************** CP example problems =================== file knapsackalld_relax.mos ``````````````````````````` Knapsack problem with additional alldifferent constraint solved using linear relaxations. (c) 2009 Artelys S.A. and Fair Isaac Corporation Creation: 2009, rev. Mar. 2013 *****************************************************************!) model "Knapsack with side constraints" uses "kalis" declarations x1,x2,x3: cpvar ! Decision variables benefit : cpvar ! The objective to minimize end-declarations ! Enable output printing setparam("kalis_verbose_level", 1) ! Setting name of variables for pretty printing setname(x1,"x1"); setname(x2,"x2"); setname(x3,"x3") setname(benefit,"benefit") ! Set initial domains for variables setdomain(x1, {1,3,8,12}) setdomain(x2, {1,3,8,12}) setdomain(x3, {1,3,8,12}) ! Knapsack constraint 3*x1 + 5*x2 + 2*x3 >= 30 ! Additional global constraint all_different({x1,x2,x3}) ! Objective function benefit = 5*x1 + 8*x2 + 4*x3 ! Initial propagation res := cp_propagate ! Display bounds on objective after constraint propagation writeln("Constraints propagation objective ", benefit) declarations myrelaxall: cplinrelax end-declarations ! Build an automatic 'LP' oriented linear relaxation myrelaxall:= cp_get_linrelax(0) ! Output the relaxation to the screen cp_show_relax(myrelaxall) mysolver:= get_linrelax_solver(myrelaxall, benefit, KALIS_MINIMIZE, KALIS_SOLVE_AS_MIP, KALIS_TOPNODE_RELAX_SOLVER) ! Define the linear relaxation cp_add_linrelax_solver(mysolver) ! Define a 'MIP' style branching scheme using the solution of the ! optimal relaxation cp_set_branching(assign_var(KALIS_LARGEST_REDUCED_COST(mysolver), KALIS_NEAREST_RELAXED_VALUE(mysolver))) ! Solve the problem if (cp_minimize(benefit)) then cp_show_sol ! Output optimal solution to screen end-if end-model