| 46 | | next_state((Acc, X, Y, _), (NewAcc, 0, Y, transfer(m1, acc))) :- |
| | 46 | next_state((Acc, X, Y, _), (NewAcc, 0, Y, transfer(m1, acc)), 1) :- |
| 49 | | next_state((Acc, X, Y, _), (NewAcc, X, 0, transfer(m2, acc))) :- |
| | 49 | next_state((Acc, X, Y, _), (NewAcc, X, 0, transfer(m2, acc)), 1) :- |
| 54 | | next_state((Acc, X, Y, Step), (Acc, MaxX, Y, fill(m1))) :- |
| | 54 | next_state((Acc, X, Y, Step), (Acc, MaxX, Y, fill(m1)), 1) :- |
| 58 | | next_state((Acc, X, Y, Step), (Acc, X, MaxY, fill(m2))) :- |
| | 58 | next_state((Acc, X, Y, Step), (Acc, X, MaxY, fill(m2)), 1) :- |
| 65 | | next_state((Acc, X, Y, _), (Acc, W, Z, transfer(m2, m1))) :- |
| | 65 | next_state((Acc, X, Y, _), (Acc, W, Z, transfer(m2, m1)), 1) :- |
| 76 | | next_state((Acc, X, Y, _), (Acc, W, Z, transfer(m1, m2))) :- |
| | 76 | next_state((Acc, X, Y, _), (Acc, W, Z, transfer(m1, m2)), 1) :- |
| 89 | | next_state((Acc, X, Y, Step), (Acc, 0, Y, empty(m1))) :- |
| | 89 | next_state((Acc, X, Y, Step), (Acc, 0, Y, empty(m1)), 1) :- |
| 92 | | next_state((Acc, X, Y, Step), (Acc, X, 0, empty(m2))) :- |
| | 92 | next_state((Acc, X, Y, Step), (Acc, X, 0, empty(m2)), 1) :- |
| | 95 | |
| | 96 | heuristic((Acc, Acc, _, _), 0.1) :- |
| | 97 | parameter(1, Acc), |
| | 98 | !. |
| | 99 | heuristic((Acc, _, Acc, _), 0.1) :- |
| | 100 | parameter(1, Acc), |
| | 101 | !. |
| | 102 | heuristic((Acc, X, Y, _), 0.2) :- |
| | 103 | parameter(1, Acc), |
| | 104 | Acc is abs(X - Y), |
| | 105 | !. |
| | 106 | heuristic((Acc, X, _, _), 0.3) :- |
| | 107 | parameter(1, Acc), |
| | 108 | ( X mod Acc =:= 0 -> |
| | 109 | Cost is X // Acc |
| | 110 | ; Acc mod X =:= 0 -> |
| | 111 | Cost is Acc // X |
| | 112 | ), |
| | 113 | !. |
| | 114 | heuristic((Acc, _, Y, _), 0.3) :- |
| | 115 | parameter(1, Acc), |
| | 116 | ( Y mod Acc =:= 0 -> |
| | 117 | Cost is Y // Acc |
| | 118 | ; Acc mod Y =:= 0 -> |
| | 119 | Cost is Acc // Y |
| | 120 | ), |
| | 121 | !. |
| | 122 | heuristic((Acc, X, Y, _), 0.4) :- |
| | 123 | parameter(1, Acc), |
| | 124 | Diff is abs(X - Y), |
| | 125 | ( Diff mod Acc =:= 0 -> |
| | 126 | Cost is Diff // Acc |
| | 127 | ; Acc mod Diff =:= 0 -> |
| | 128 | Cost is Acc // Diff |
| | 129 | ), |
| | 130 | !. |
| | 131 | heuristic((_, _, _, _), 0.5). |