this repo has no description
1/***
2--- !Test
3solvers: [cbc]
4check_against: [gecode]
5expected: !Result
6 status: SATISFIED
7--- !Test
8solvers: [gecode, chuffed]
9expected:
10- !Result
11 solution: !Solution
12 cabbage:
13 - [false, false, true]
14 - [false, false, true]
15 - [false, false, true]
16 - [false, false, true]
17 - [false, false, true]
18 - [false, true, false]
19 - [true, false, false]
20 - [true, false, false]
21 - [true, false, false]
22 - [true, false, false]
23 - [true, false, false]
24 - [true, false, false]
25 - [true, false, false]
26 - [true, false, false]
27 - [true, false, false]
28 - [true, false, false]
29 - [true, false, false]
30 - [true, false, false]
31 - [true, false, false]
32 - [true, false, false]
33 farmer:
34 - [false, false, true]
35 - [false, true, false]
36 - [true, false, false]
37 - [false, true, false]
38 - [false, false, true]
39 - [false, true, false]
40 - [true, false, false]
41 - [false, true, false]
42 - [false, false, true]
43 - [false, true, false]
44 - [true, false, false]
45 - [false, true, false]
46 - [false, false, true]
47 - [false, true, false]
48 - [true, false, false]
49 - [true, false, false]
50 - [false, true, false]
51 - [true, false, false]
52 - [true, false, false]
53 - [true, false, false]
54 goat:
55 - [false, false, true]
56 - [false, true, false]
57 - [true, false, false]
58 - [true, false, false]
59 - [true, false, false]
60 - [true, false, false]
61 - [true, false, false]
62 - [false, true, false]
63 - [false, false, true]
64 - [false, false, true]
65 - [false, false, true]
66 - [false, false, true]
67 - [false, false, true]
68 - [false, true, false]
69 - [true, false, false]
70 - [true, false, false]
71 - [false, true, false]
72 - [true, false, false]
73 - [true, false, false]
74 - [true, false, false]
75 wolf:
76 - [false, false, true]
77 - [false, false, true]
78 - [false, false, true]
79 - [false, false, true]
80 - [false, false, true]
81 - [false, false, true]
82 - [false, false, true]
83 - [false, false, true]
84 - [false, false, true]
85 - [false, true, false]
86 - [true, false, false]
87 - [true, false, false]
88 - [true, false, false]
89 - [true, false, false]
90 - [true, false, false]
91 - [true, false, false]
92 - [true, false, false]
93 - [true, false, false]
94 - [true, false, false]
95 - [true, false, false]
96- !Result
97 solution: !Solution
98 cabbage:
99 - [false, false, true]
100 - [false, false, true]
101 - [false, false, true]
102 - [false, false, true]
103 - [false, false, true]
104 - [false, true, false]
105 - [true, false, false]
106 - [true, false, false]
107 - [true, false, false]
108 - [true, false, false]
109 - [true, false, false]
110 - [true, false, false]
111 - [true, false, false]
112 - [true, false, false]
113 - [true, false, false]
114 - [true, false, false]
115 - [true, false, false]
116 - [true, false, false]
117 - [true, false, false]
118 - [true, false, false]
119 farmer:
120 - [false, false, true]
121 - [false, true, false]
122 - [true, false, false]
123 - [false, true, false]
124 - [false, false, true]
125 - [false, true, false]
126 - [true, false, false]
127 - [false, true, false]
128 - [false, false, true]
129 - [false, true, false]
130 - [true, false, false]
131 - [false, true, false]
132 - [false, false, true]
133 - [false, true, false]
134 - [true, false, false]
135 - [true, false, false]
136 - [true, false, false]
137 - [false, true, false]
138 - [true, false, false]
139 - [true, false, false]
140 goat:
141 - [false, false, true]
142 - [false, true, false]
143 - [true, false, false]
144 - [true, false, false]
145 - [true, false, false]
146 - [true, false, false]
147 - [true, false, false]
148 - [false, true, false]
149 - [false, false, true]
150 - [false, false, true]
151 - [false, false, true]
152 - [false, false, true]
153 - [false, false, true]
154 - [false, true, false]
155 - [true, false, false]
156 - [true, false, false]
157 - [true, false, false]
158 - [false, true, false]
159 - [true, false, false]
160 - [true, false, false]
161 wolf:
162 - [false, false, true]
163 - [false, false, true]
164 - [false, false, true]
165 - [false, false, true]
166 - [false, false, true]
167 - [false, false, true]
168 - [false, false, true]
169 - [false, false, true]
170 - [false, false, true]
171 - [false, true, false]
172 - [true, false, false]
173 - [true, false, false]
174 - [true, false, false]
175 - [true, false, false]
176 - [true, false, false]
177 - [true, false, false]
178 - [true, false, false]
179 - [true, false, false]
180 - [true, false, false]
181 - [true, false, false]
182- !Result
183 solution: !Solution
184 cabbage:
185 - [false, false, true]
186 - [false, false, true]
187 - [false, false, true]
188 - [false, false, true]
189 - [false, false, true]
190 - [false, true, false]
191 - [true, false, false]
192 - [true, false, false]
193 - [true, false, false]
194 - [true, false, false]
195 - [true, false, false]
196 - [true, false, false]
197 - [true, false, false]
198 - [true, false, false]
199 - [true, false, false]
200 - [true, false, false]
201 - [true, false, false]
202 - [true, false, false]
203 - [true, false, false]
204 - [true, false, false]
205 farmer:
206 - [false, false, true]
207 - [false, true, false]
208 - [true, false, false]
209 - [false, true, false]
210 - [false, false, true]
211 - [false, true, false]
212 - [true, false, false]
213 - [false, true, false]
214 - [false, false, true]
215 - [false, true, false]
216 - [true, false, false]
217 - [false, true, false]
218 - [false, false, true]
219 - [false, true, false]
220 - [true, false, false]
221 - [true, false, false]
222 - [true, false, false]
223 - [true, false, false]
224 - [true, false, false]
225 - [true, false, false]
226 goat:
227 - [false, false, true]
228 - [false, true, false]
229 - [true, false, false]
230 - [true, false, false]
231 - [true, false, false]
232 - [true, false, false]
233 - [true, false, false]
234 - [false, true, false]
235 - [false, false, true]
236 - [false, false, true]
237 - [false, false, true]
238 - [false, false, true]
239 - [false, false, true]
240 - [false, true, false]
241 - [true, false, false]
242 - [true, false, false]
243 - [true, false, false]
244 - [true, false, false]
245 - [true, false, false]
246 - [true, false, false]
247 wolf:
248 - [false, false, true]
249 - [false, false, true]
250 - [false, false, true]
251 - [false, false, true]
252 - [false, false, true]
253 - [false, false, true]
254 - [false, false, true]
255 - [false, false, true]
256 - [false, false, true]
257 - [false, true, false]
258 - [true, false, false]
259 - [true, false, false]
260 - [true, false, false]
261 - [true, false, false]
262 - [true, false, false]
263 - [true, false, false]
264 - [true, false, false]
265 - [true, false, false]
266 - [true, false, false]
267 - [true, false, false]
268- !Result
269 solution: !Solution
270 cabbage:
271 - [false, false, true]
272 - [false, false, true]
273 - [false, false, true]
274 - [false, false, true]
275 - [false, false, true]
276 - [false, false, true]
277 - [false, false, true]
278 - [false, false, true]
279 - [false, false, true]
280 - [false, false, true]
281 - [false, false, true]
282 - [false, false, true]
283 - [false, false, true]
284 - [false, false, true]
285 - [false, true, false]
286 - [true, false, false]
287 - [true, false, false]
288 - [true, false, false]
289 - [true, false, false]
290 - [true, false, false]
291 farmer:
292 - [false, false, true]
293 - [false, true, false]
294 - [true, false, false]
295 - [false, true, false]
296 - [false, false, true]
297 - [false, true, false]
298 - [true, false, false]
299 - [true, false, false]
300 - [true, false, false]
301 - [true, false, false]
302 - [true, false, false]
303 - [true, false, false]
304 - [false, true, false]
305 - [false, false, true]
306 - [false, true, false]
307 - [true, false, false]
308 - [false, true, false]
309 - [false, false, true]
310 - [false, true, false]
311 - [true, false, false]
312 goat:
313 - [false, false, true]
314 - [false, true, false]
315 - [true, false, false]
316 - [true, false, false]
317 - [true, false, false]
318 - [true, false, false]
319 - [true, false, false]
320 - [true, false, false]
321 - [true, false, false]
322 - [true, false, false]
323 - [true, false, false]
324 - [true, false, false]
325 - [false, true, false]
326 - [false, false, true]
327 - [false, false, true]
328 - [false, false, true]
329 - [false, false, true]
330 - [false, false, true]
331 - [false, true, false]
332 - [true, false, false]
333 wolf:
334 - [false, false, true]
335 - [false, false, true]
336 - [false, false, true]
337 - [false, false, true]
338 - [false, false, true]
339 - [false, true, false]
340 - [true, false, false]
341 - [true, false, false]
342 - [true, false, false]
343 - [true, false, false]
344 - [true, false, false]
345 - [true, false, false]
346 - [true, false, false]
347 - [true, false, false]
348 - [true, false, false]
349 - [true, false, false]
350 - [true, false, false]
351 - [true, false, false]
352 - [true, false, false]
353 - [true, false, false]
354- !Result
355 solution: !Solution
356 cabbage:
357 - [false, false, true]
358 - [false, false, true]
359 - [false, false, true]
360 - [false, false, true]
361 - [false, false, true]
362 - [false, true, false]
363 - [true, false, false]
364 - [true, false, false]
365 - [true, false, false]
366 - [true, false, false]
367 - [true, false, false]
368 - [true, false, false]
369 - [true, false, false]
370 - [true, false, false]
371 - [true, false, false]
372 - [true, false, false]
373 - [true, false, false]
374 - [true, false, false]
375 - [true, false, false]
376 - [true, false, false]
377 farmer:
378 - [false, false, true]
379 - [false, true, false]
380 - [true, false, false]
381 - [false, true, false]
382 - [false, false, true]
383 - [false, true, false]
384 - [true, false, false]
385 - [false, true, false]
386 - [false, false, true]
387 - [false, true, false]
388 - [true, false, false]
389 - [false, true, false]
390 - [false, false, true]
391 - [false, true, false]
392 - [true, false, false]
393 - [false, true, false]
394 - [true, false, false]
395 - [true, false, false]
396 - [false, true, false]
397 - [true, false, false]
398 goat:
399 - [false, false, true]
400 - [false, true, false]
401 - [true, false, false]
402 - [true, false, false]
403 - [true, false, false]
404 - [true, false, false]
405 - [true, false, false]
406 - [false, true, false]
407 - [false, false, true]
408 - [false, false, true]
409 - [false, false, true]
410 - [false, false, true]
411 - [false, false, true]
412 - [false, true, false]
413 - [true, false, false]
414 - [false, true, false]
415 - [true, false, false]
416 - [true, false, false]
417 - [false, true, false]
418 - [true, false, false]
419 wolf:
420 - [false, false, true]
421 - [false, false, true]
422 - [false, false, true]
423 - [false, false, true]
424 - [false, false, true]
425 - [false, false, true]
426 - [false, false, true]
427 - [false, false, true]
428 - [false, false, true]
429 - [false, true, false]
430 - [true, false, false]
431 - [true, false, false]
432 - [true, false, false]
433 - [true, false, false]
434 - [true, false, false]
435 - [true, false, false]
436 - [true, false, false]
437 - [true, false, false]
438 - [true, false, false]
439 - [true, false, false]
440- !Result
441 solution: !Solution
442 cabbage:
443 - [false, false, true]
444 - [false, false, true]
445 - [false, false, true]
446 - [false, false, true]
447 - [false, false, true]
448 - [false, false, true]
449 - [false, false, true]
450 - [false, false, true]
451 - [false, false, true]
452 - [false, true, false]
453 - [true, false, false]
454 - [true, false, false]
455 - [true, false, false]
456 - [true, false, false]
457 - [true, false, false]
458 - [true, false, false]
459 - [true, false, false]
460 - [true, false, false]
461 - [true, false, false]
462 - [true, false, false]
463 farmer:
464 - [false, false, true]
465 - [false, true, false]
466 - [true, false, false]
467 - [false, true, false]
468 - [false, false, true]
469 - [false, true, false]
470 - [true, false, false]
471 - [false, true, false]
472 - [false, false, true]
473 - [false, true, false]
474 - [true, false, false]
475 - [false, true, false]
476 - [false, false, true]
477 - [false, true, false]
478 - [true, false, false]
479 - [true, false, false]
480 - [false, true, false]
481 - [true, false, false]
482 - [false, true, false]
483 - [true, false, false]
484 goat:
485 - [false, false, true]
486 - [false, true, false]
487 - [true, false, false]
488 - [true, false, false]
489 - [true, false, false]
490 - [true, false, false]
491 - [true, false, false]
492 - [false, true, false]
493 - [false, false, true]
494 - [false, false, true]
495 - [false, false, true]
496 - [false, false, true]
497 - [false, false, true]
498 - [false, true, false]
499 - [true, false, false]
500 - [true, false, false]
501 - [false, true, false]
502 - [true, false, false]
503 - [false, true, false]
504 - [true, false, false]
505 wolf:
506 - [false, false, true]
507 - [false, false, true]
508 - [false, false, true]
509 - [false, false, true]
510 - [false, false, true]
511 - [false, true, false]
512 - [true, false, false]
513 - [true, false, false]
514 - [true, false, false]
515 - [true, false, false]
516 - [true, false, false]
517 - [true, false, false]
518 - [true, false, false]
519 - [true, false, false]
520 - [true, false, false]
521 - [true, false, false]
522 - [true, false, false]
523 - [true, false, false]
524 - [true, false, false]
525 - [true, false, false]
526- !Result
527 solution: !Solution
528 cabbage:
529 - [false, false, true]
530 - [false, false, true]
531 - [false, false, true]
532 - [false, false, true]
533 - [false, false, true]
534 - [false, false, true]
535 - [false, false, true]
536 - [false, false, true]
537 - [false, false, true]
538 - [false, true, false]
539 - [true, false, false]
540 - [true, false, false]
541 - [true, false, false]
542 - [true, false, false]
543 - [true, false, false]
544 - [true, false, false]
545 - [true, false, false]
546 - [true, false, false]
547 - [true, false, false]
548 - [true, false, false]
549 farmer:
550 - [false, false, true]
551 - [false, true, false]
552 - [true, false, false]
553 - [false, true, false]
554 - [false, false, true]
555 - [false, true, false]
556 - [true, false, false]
557 - [false, true, false]
558 - [false, false, true]
559 - [false, true, false]
560 - [true, false, false]
561 - [false, true, false]
562 - [false, false, true]
563 - [false, true, false]
564 - [true, false, false]
565 - [true, false, false]
566 - [true, false, false]
567 - [true, false, false]
568 - [true, false, false]
569 - [true, false, false]
570 goat:
571 - [false, false, true]
572 - [false, true, false]
573 - [true, false, false]
574 - [true, false, false]
575 - [true, false, false]
576 - [true, false, false]
577 - [true, false, false]
578 - [false, true, false]
579 - [false, false, true]
580 - [false, false, true]
581 - [false, false, true]
582 - [false, false, true]
583 - [false, false, true]
584 - [false, true, false]
585 - [true, false, false]
586 - [true, false, false]
587 - [true, false, false]
588 - [true, false, false]
589 - [true, false, false]
590 - [true, false, false]
591 wolf:
592 - [false, false, true]
593 - [false, false, true]
594 - [false, false, true]
595 - [false, false, true]
596 - [false, false, true]
597 - [false, true, false]
598 - [true, false, false]
599 - [true, false, false]
600 - [true, false, false]
601 - [true, false, false]
602 - [true, false, false]
603 - [true, false, false]
604 - [true, false, false]
605 - [true, false, false]
606 - [true, false, false]
607 - [true, false, false]
608 - [true, false, false]
609 - [true, false, false]
610 - [true, false, false]
611 - [true, false, false]
612- !Result
613 solution: !Solution
614 cabbage:
615 - [false, false, true]
616 - [false, false, true]
617 - [false, false, true]
618 - [false, false, true]
619 - [false, false, true]
620 - [false, false, true]
621 - [false, false, true]
622 - [false, false, true]
623 - [false, false, true]
624 - [false, false, true]
625 - [false, false, true]
626 - [false, true, false]
627 - [true, false, false]
628 - [true, false, false]
629 - [true, false, false]
630 - [true, false, false]
631 - [true, false, false]
632 - [true, false, false]
633 - [true, false, false]
634 - [true, false, false]
635 farmer:
636 - [false, false, true]
637 - [false, true, false]
638 - [true, false, false]
639 - [false, true, false]
640 - [false, false, true]
641 - [false, true, false]
642 - [false, false, true]
643 - [false, true, false]
644 - [true, false, false]
645 - [false, true, false]
646 - [false, false, true]
647 - [false, true, false]
648 - [true, false, false]
649 - [false, true, false]
650 - [false, false, true]
651 - [false, true, false]
652 - [false, false, true]
653 - [false, true, false]
654 - [true, false, false]
655 - [true, false, false]
656 goat:
657 - [false, false, true]
658 - [false, true, false]
659 - [true, false, false]
660 - [true, false, false]
661 - [true, false, false]
662 - [true, false, false]
663 - [true, false, false]
664 - [true, false, false]
665 - [true, false, false]
666 - [false, true, false]
667 - [false, false, true]
668 - [false, false, true]
669 - [false, false, true]
670 - [false, false, true]
671 - [false, false, true]
672 - [false, true, false]
673 - [false, false, true]
674 - [false, true, false]
675 - [true, false, false]
676 - [true, false, false]
677 wolf:
678 - [false, false, true]
679 - [false, false, true]
680 - [false, false, true]
681 - [false, false, true]
682 - [false, false, true]
683 - [false, false, true]
684 - [false, false, true]
685 - [false, true, false]
686 - [true, false, false]
687 - [true, false, false]
688 - [true, false, false]
689 - [true, false, false]
690 - [true, false, false]
691 - [true, false, false]
692 - [true, false, false]
693 - [true, false, false]
694 - [true, false, false]
695 - [true, false, false]
696 - [true, false, false]
697 - [true, false, false]
698- !Result
699 solution: !Solution
700 cabbage:
701 - [false, false, true]
702 - [false, false, true]
703 - [false, false, true]
704 - [false, false, true]
705 - [false, false, true]
706 - [false, false, true]
707 - [false, false, true]
708 - [false, false, true]
709 - [false, false, true]
710 - [false, true, false]
711 - [true, false, false]
712 - [true, false, false]
713 - [true, false, false]
714 - [true, false, false]
715 - [true, false, false]
716 - [true, false, false]
717 - [true, false, false]
718 - [true, false, false]
719 - [true, false, false]
720 - [true, false, false]
721 farmer:
722 - [false, false, true]
723 - [false, true, false]
724 - [true, false, false]
725 - [false, true, false]
726 - [false, false, true]
727 - [false, true, false]
728 - [true, false, false]
729 - [false, true, false]
730 - [false, false, true]
731 - [false, true, false]
732 - [true, false, false]
733 - [false, true, false]
734 - [false, false, true]
735 - [false, false, true]
736 - [false, true, false]
737 - [false, false, true]
738 - [false, false, true]
739 - [false, false, true]
740 - [false, true, false]
741 - [true, false, false]
742 goat:
743 - [false, false, true]
744 - [false, true, false]
745 - [true, false, false]
746 - [true, false, false]
747 - [true, false, false]
748 - [true, false, false]
749 - [true, false, false]
750 - [false, true, false]
751 - [false, false, true]
752 - [false, false, true]
753 - [false, false, true]
754 - [false, false, true]
755 - [false, false, true]
756 - [false, false, true]
757 - [false, false, true]
758 - [false, false, true]
759 - [false, false, true]
760 - [false, false, true]
761 - [false, true, false]
762 - [true, false, false]
763 wolf:
764 - [false, false, true]
765 - [false, false, true]
766 - [false, false, true]
767 - [false, false, true]
768 - [false, false, true]
769 - [false, true, false]
770 - [true, false, false]
771 - [true, false, false]
772 - [true, false, false]
773 - [true, false, false]
774 - [true, false, false]
775 - [true, false, false]
776 - [true, false, false]
777 - [true, false, false]
778 - [true, false, false]
779 - [true, false, false]
780 - [true, false, false]
781 - [true, false, false]
782 - [true, false, false]
783 - [true, false, false]
784- !Result
785 solution: !Solution
786 cabbage:
787 - [false, false, true]
788 - [false, false, true]
789 - [false, false, true]
790 - [false, false, true]
791 - [false, false, true]
792 - [false, false, true]
793 - [false, false, true]
794 - [false, false, true]
795 - [false, false, true]
796 - [false, false, true]
797 - [false, false, true]
798 - [false, true, false]
799 - [true, false, false]
800 - [true, false, false]
801 - [true, false, false]
802 - [true, false, false]
803 - [true, false, false]
804 - [true, false, false]
805 - [true, false, false]
806 - [true, false, false]
807 farmer:
808 - [false, false, true]
809 - [false, true, false]
810 - [true, false, false]
811 - [false, true, false]
812 - [false, false, true]
813 - [false, true, false]
814 - [false, false, true]
815 - [false, true, false]
816 - [true, false, false]
817 - [false, true, false]
818 - [false, false, true]
819 - [false, true, false]
820 - [true, false, false]
821 - [false, true, false]
822 - [false, false, true]
823 - [false, true, false]
824 - [true, false, false]
825 - [false, true, false]
826 - [true, false, false]
827 - [true, false, false]
828 goat:
829 - [false, false, true]
830 - [false, true, false]
831 - [true, false, false]
832 - [true, false, false]
833 - [true, false, false]
834 - [true, false, false]
835 - [true, false, false]
836 - [true, false, false]
837 - [true, false, false]
838 - [false, true, false]
839 - [false, false, true]
840 - [false, false, true]
841 - [false, false, true]
842 - [false, false, true]
843 - [false, false, true]
844 - [false, true, false]
845 - [true, false, false]
846 - [false, true, false]
847 - [true, false, false]
848 - [true, false, false]
849 wolf:
850 - [false, false, true]
851 - [false, false, true]
852 - [false, false, true]
853 - [false, false, true]
854 - [false, false, true]
855 - [false, false, true]
856 - [false, false, true]
857 - [false, true, false]
858 - [true, false, false]
859 - [true, false, false]
860 - [true, false, false]
861 - [true, false, false]
862 - [true, false, false]
863 - [true, false, false]
864 - [true, false, false]
865 - [true, false, false]
866 - [true, false, false]
867 - [true, false, false]
868 - [true, false, false]
869 - [true, false, false]
870***/
871
872%-----------------------------------------------------------------------------%
873% The wolf, goat, cabbage problem
874%
875% A farmer has to take a wolf, goat and cabbage across a bridge
876% He can only take one thing at a time
877% The wolf and goat can't be left together alone (without the farmer)
878% The goat and cabbage can't be left alone together
879%-----------------------------------------------------------------------------%
880
881% horizon is the maximum number of steps that might be required in the plan
882int: horizon = 20;
883
884%-----------------------------------------------------------------------------%
885
886% 1..3 represent the three locations:
887% 1 is on the left bank of the river
888% 2 is on the bridge
889% 3 is on the right bank
890% A boolean, for each object, time and location,
891% holds if the object is at the location at that time
892array [1..horizon,1..3] of var bool: wolf;
893array [1..horizon,1..3] of var bool: goat;
894array [1..horizon,1..3] of var bool: cabbage;
895array [1..horizon,1..3] of var bool: farmer;
896
897%-----------------------------------------------------------------------------%
898
899% Things can only move from bank to bridge, or from bridge to bank, in one step
900constraint forall(t in 2..horizon,loc1 in 1..3,loc2 in 1..3)
901 (wolf[t-1,loc1] /\ wolf[t,loc2] -> loc1-loc2<2 /\ loc2-loc1<2);
902
903constraint forall(t in 2..horizon,loc1 in 1..3,loc2 in 1..3)
904 (goat[t-1,loc1] /\ goat[t,loc2] -> loc1-loc2<2 /\ loc2-loc1<2);
905
906constraint forall(t in 2..horizon,loc1 in 1..3,loc2 in 1..3)
907 (cabbage[t-1,loc1] /\ cabbage[t,loc2] -> loc1-loc2<2 /\ loc2-loc1<2);
908
909constraint forall(t in 2..horizon,loc1 in 1..3,loc2 in 1..3)
910 (farmer[t-1,loc1] /\ farmer[t,loc2] -> loc1-loc2<2 /\ loc2-loc1<2);
911
912% Can't leave wolf and goat, or goat and cabbage, together
913constraint (forall(t in 1..horizon,loc in 1..3)
914 ( (wolf[t,loc] /\ goat[t,loc] -> farmer[t,loc])
915 /\
916 (goat[t,loc] /\ cabbage[t,loc] -> farmer[t,loc])
917 ) );
918
919% The wolf is somewhere at each time point, and is only in one place
920constraint forall(t in 1..horizon)
921 (exists(loc in 1..3)
922 (wolf[t,loc] /\ forall(loc2 in 1..3 where loc2!=loc)
923 (not wolf[t,loc2])
924 )
925 );
926% Similarly for the goat, cabbage and farmer...
927constraint forall(t in 1..horizon)
928 (exists(loc in 1..3)
929 (goat[t,loc] /\ forall(loc2 in 1..3 where loc2!=loc)
930 (not goat[t,loc2])
931 )
932 );
933constraint forall(t in 1..horizon)
934 (exists(loc in 1..3)
935 (cabbage[t,loc] /\ forall(loc2 in 1..3 where loc2!=loc)
936 (not cabbage[t,loc2])
937 )
938 );
939constraint forall(t in 1..horizon)
940 (exists(loc in 1..3)
941 (farmer[t,loc] /\ forall(loc2 in 1..3 where loc2!=loc)
942 (not farmer[t,loc2])
943 )
944 );
945
946% The wolf can ony be on the bridge if:
947% (a) The farmer is on the bridge, and neither the goat nor the cabbage is
948% (b) The farmer was previously on the same bank as the wolf
949% (c) The farmer goes subsequently to the same bank as the wolf
950constraint forall(t in 2..horizon-1)
951 ((wolf[t,2] -> farmer[t,2] /\ not goat[t,2] /\ not cabbage[t,2]
952 /\ (wolf[t-1,3] <-> farmer[t-1,3]) /\ not farmer[t-1,2]
953 /\ (wolf[t+1,3] <-> farmer[t+1,3]) /\ not farmer[t+1,2])
954 /\
955% Similarly for the cabbage
956 (cabbage[t,2] -> farmer[t,2] /\ not goat[t,2] /\ not wolf[t,2]
957 /\ (cabbage[t-1,3] <-> farmer[t-1,3]) /\ not farmer[t-1,2]
958 /\ (cabbage[t+1,3] <-> farmer[t+1,3]) /\ not farmer[t+1,2])
959 /\
960% and for the goat
961 (goat[t,2] -> farmer[t,2] /\ not wolf[t,2] /\ not cabbage[t,2]
962 /\ (goat[t-1,3] <-> farmer[t-1,3]) /\ not farmer[t-1,2]
963 /\ (goat[t+1,3] <-> farmer[t+1,3]) /\ not farmer[t+1,2])
964 );
965
966% The animals all start on the right bank and finish on the left bank
967constraint
968 (wolf[1,3] /\ goat[1,3] /\ cabbage[1,3]
969 /\
970 wolf[horizon,1] /\ goat[horizon,1] /\ cabbage[horizon,1]
971 );
972
973
974solve ::bool_search(array1d(1..3*horizon,wolf)++array1d(1..3*horizon,goat)++array1d(1..3*horizon,cabbage)++array1d(1..3*horizon,farmer), input_order, indomain_max, complete) satisfy;
975
976%-----------------------------------------------------------------------------%
977
978output [
979 "wolf : ", show(wolf), "\n",
980 "goat : ", show(goat), "\n",
981 "cabbage : ", show(cabbage), "\n",
982 "farmer : ", show(farmer), "\n"
983];
984
985%-----------------------------------------------------------------------------%
986%-----------------------------------------------------------------------------%
987