A.33.4.3 Example 3
We are given:
- 3 coins each worth 1 unit
- 20 coins each worth 5 units and
- 10 coins each worth 20 units.
The task is to find a minimal number of these coins that
amount to 111 units in total. We introduce variables c(1)
, c(5)
and c(20)
denoting how many coins to take of the respective
type:
:- use_module(library(simplex)). coins(S) :- gen_state(S0), coins(S0, S). coins --> constraint([c(1), 5*c(5), 20*c(20)] = 111), constraint([c(1)] =< 3), constraint([c(5)] =< 20), constraint([c(20)] =< 10), constraint([c(1)] >= 0), constraint([c(5)] >= 0), constraint([c(20)] >= 0), constraint(integral(c(1))), constraint(integral(c(5))), constraint(integral(c(20))), minimize([c(1), c(5), c(20)]).
An example query:
?- coins(S), variable_value(S, c(1), C1), variable_value(S, c(5), C5), variable_value(S, c(20), C20). C1 = 1, C5 = 2, C20 = 5.