problem(A,B,C,Profit,Cout) :- fd_domain([A,B,C],1,10000), fd_domain(Profit,0,10000), Cout #=< 2000, Profit #= 30*A + 40*B + 70*C, cout(A,B,C,Cout), fd_labeling([A,B,C,Cout,Profit]). prob(A,B,C,Profit,Cout) :- fd_maximize(problem(A,B,C,Profit,Cout),Profit). coutA(1,100). coutA(2,170). coutA(3,220). coutA(N,C) :- N #> 3, C #= 220 + (N-3)*35. coutB(1,200). coutB(2,340). coutB(3,405). coutB(N,C) :- N #> 3, C #= 405 + (N-3)*50. coutC(1,450). coutC(2,750). coutC(3,950). coutC(N,C) :- N #> 3, C #= 750 + (N-3)*100. cout(A,B,C,Cout) :- coutA(A,CA), coutB(B,CB), coutC(C,CC), Cout #= CA + CB + CC.