/* Voltage divider problem in Picat. Problem from Marriott & Stuckey Programming in Constraints, page 137ff This Picat model was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ import mip. main => go. go => %% Goal for voltage divider program page 138. V :: -100.0..100.0, R1 :: -100.0..100.0, R2 :: -100.0..100.0, VD :: -100.0..100.0, ID :: -100.0..100.0, I :: -100.0..100.0, cell(V), resistor(R1), resistor(R2), voltage_divider(V, I, R1, R2, VD, ID), 5.4 #<= VD, VD #<= 5.5, ID #= 0.1, solve([V,I,R1,R2,VD,ID]), println([V,I,R1,R2,VD,ID]), nl. %% %% Rules for voltage divider program page 138 %% voltage_divider(V, I, R1, R2, VD, ID) => V1 :: -100.0..100.0, I2 :: -100.0..100.0, V1 #= I * R1, VD #= I2 * R2, V #= V1 + VD, I #= I2 + ID. cells(Cells) => Cells = [9.0,12.0]. cell(C) => cells(Cells), member(C, Cells). resistors(Resistors) => Resistors = [ 5.0, 9.0, 14.0 ]. resistor(R) => resistors(Resistors), member(R,Resistors).