this repo has no description
at develop 27 kB view raw
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