From c5b4c065902210f689989f145dd06c857552535c Mon Sep 17 00:00:00 2001 From: yang-taonan <2151738610@qq.com> Date: Fri, 23 May 2025 15:26:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A8=A1=E6=8B=9F=E9=80=80=E7=81=AB=E7=AE=97?= =?UTF-8?q?=E6=B3=95=E7=9A=84PSFP=E7=A0=94=E7=A9=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/.gitignore | 3 + .../inspectionProfiles/profiles_settings.xml | 6 + .idea/misc.xml | 7 + .idea/modules.xml | 8 + .idea/pfsp_simulated_annealing.iml | 10 + .idea/vcs.xml | 6 + README.md | 1 + TestData.txt | 233 ++++++++++++++++++ pfsp_simulated_annealing/__init__.py | 0 pfsp_simulated_annealing/data/input.txt | 21 ++ pfsp_simulated_annealing/data/trace.txt | 1 + pfsp_simulated_annealing/draw.py | 92 +++++++ pfsp_simulated_annealing/machine.py | 27 ++ .../output/management.txt | 10 + pfsp_simulated_annealing/output/time.txt | 10 + pfsp_simulated_annealing/simulate.py | 163 ++++++++++++ pfsp_simulated_annealing/solution.py | 74 ++++++ pfsp_simulated_annealing/trace.jpg | Bin 0 -> 22710 bytes pfsp_simulated_annealing/workpiece.py | 27 ++ tests/__init__.py | 0 tests/test_simulate.py | 0 21 files changed, 699 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/pfsp_simulated_annealing.iml create mode 100644 .idea/vcs.xml create mode 100644 README.md create mode 100644 TestData.txt create mode 100644 pfsp_simulated_annealing/__init__.py create mode 100644 pfsp_simulated_annealing/data/input.txt create mode 100644 pfsp_simulated_annealing/data/trace.txt create mode 100644 pfsp_simulated_annealing/draw.py create mode 100644 pfsp_simulated_annealing/machine.py create mode 100644 pfsp_simulated_annealing/output/management.txt create mode 100644 pfsp_simulated_annealing/output/time.txt create mode 100644 pfsp_simulated_annealing/simulate.py create mode 100644 pfsp_simulated_annealing/solution.py create mode 100644 pfsp_simulated_annealing/trace.jpg create mode 100644 pfsp_simulated_annealing/workpiece.py create mode 100644 tests/__init__.py create mode 100644 tests/test_simulate.py diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..88a38ee --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..cd7a799 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/pfsp_simulated_annealing.iml b/.idea/pfsp_simulated_annealing.iml new file mode 100644 index 0000000..2c80e12 --- /dev/null +++ b/.idea/pfsp_simulated_annealing.iml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..772494c --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +这是一次最优化算法的作业,使用模拟退火算法(Simulated Annealing, SA)解决置换车间调度问题(PFSP) \ No newline at end of file diff --git a/TestData.txt b/TestData.txt new file mode 100644 index 0000000..c3f9b91 --- /dev/null +++ b/TestData.txt @@ -0,0 +1,233 @@ ++++++++++++++++++++++++++++++ +instance 0 +11 5 +0 375 1 12 2 142 3 245 4 412 +0 632 1 452 2 758 3 278 4 398 +0 12 1 876 2 124 3 534 4 765 +0 460 1 542 2 523 3 120 4 499 +0 528 1 101 2 789 3 124 4 999 +0 796 1 245 2 632 3 375 4 123 +0 532 1 230 2 543 3 896 4 452 +0 14 1 124 2 214 3 543 4 785 +0 257 1 527 2 753 3 210 4 463 +0 896 1 896 2 214 3 258 4 259 +0 532 1 302 2 501 3 765 4 988 ++++++++++++++++++++++++++++++ +instance 1 +6 8 +0 456 1 654 2 852 3 145 4 632 5 425 6 214 7 654 +0 789 1 123 2 369 3 678 4 581 5 396 6 123 7 789 +0 654 1 123 2 632 3 965 4 475 5 325 6 456 7 654 +0 321 1 456 2 581 3 421 4 32 5 147 6 789 7 123 +0 456 1 789 2 472 3 365 4 536 5 852 6 654 7 123 +0 789 1 654 2 586 3 824 4 325 5 12 6 321 7 456 ++++++++++++++++++++++++++++++ +instance 2 +11 4 +0 654 1 147 2 345 3 447 +0 321 1 520 2 789 3 702 +0 12 1 147 2 630 3 255 +0 345 1 586 2 214 3 866 +0 678 1 532 2 275 3 332 +0 963 1 145 2 302 3 225 +0 25 1 24 2 142 3 589 +0 874 1 517 2 24 3 996 +0 114 1 896 2 520 3 541 +0 785 1 543 2 336 3 234 +0 203 1 210 2 699 3 784 ++++++++++++++++++++++++++++++ +instance 3 +14 5 +0 456 1 537 2 123 3 214 4 234 +0 789 1 854 2 225 3 528 4 123 +0 876 1 632 2 588 3 896 4 456 +0 543 1 145 2 669 3 325 4 789 +0 210 1 785 2 966 3 147 4 876 +0 123 1 214 2 332 3 856 4 543 +0 456 1 752 2 144 3 321 4 210 +0 789 1 143 2 755 3 427 4 123 +0 876 1 698 2 322 3 546 4 456 +0 543 1 532 2 100 3 321 4 789 +0 210 1 145 2 114 3 401 4 876 +0 124 1 247 2 753 3 214 4 543 +0 276 1 498 2 722 3 346 4 656 +0 343 1 345 2 269 3 825 4 689 ++++++++++++++++++++++++++++++ +instance 4 +16 4 +0 456 1 856 2 963 3 696 +0 789 1 930 2 21 3 320 +0 630 1 214 2 475 3 142 +0 214 1 257 2 320 3 753 +0 573 1 896 2 124 3 214 +0 218 1 532 2 752 3 528 +0 653 1 142 2 147 3 653 +0 214 1 547 2 532 3 214 +0 204 1 865 2 145 3 527 +0 785 1 321 2 763 3 536 +0 696 1 124 2 214 3 214 +0 532 1 12 2 257 3 528 +0 12 1 345 2 854 3 888 +0 457 1 678 2 123 3 999 +0 18 1 832 2 952 3 928 +0 530 1 714 2 475 3 442 ++++++++++++++++++++++++++++++ +instance 5 +10 6 +0 333 1 991 2 996 3 123 4 145 5 234 +0 333 1 111 2 663 3 456 4 785 5 532 +0 252 1 222 2 222 3 789 4 214 5 586 +0 222 1 204 2 114 3 876 4 752 5 532 +0 255 1 477 2 123 3 543 4 143 5 142 +0 555 1 566 2 456 3 210 4 698 5 573 +0 558 1 899 2 789 3 124 4 532 5 12 +0 888 1 965 2 876 3 537 4 145 5 14 +0 889 1 588 2 543 3 854 4 247 5 527 +0 999 1 889 2 210 3 632 4 451 5 856 ++++++++++++++++++++++++++++++ +instance 6 +20 10 +0 96 1 80 2 56 3 48 4 14 5 88 6 50 7 15 8 67 9 65 +0 25 1 44 2 10 3 41 4 64 5 52 6 19 7 28 8 72 9 27 +0 76 1 62 2 48 3 54 4 47 5 35 6 72 7 54 8 27 9 56 +0 41 1 6 2 3 3 33 4 77 5 44 6 43 7 50 8 19 9 43 +0 65 1 91 2 75 3 30 4 47 5 55 6 51 7 1 8 36 9 73 +0 81 1 69 2 65 3 93 4 61 5 3 6 44 7 17 8 6 9 14 +0 49 1 9 2 12 3 54 4 75 5 66 6 34 7 12 8 32 9 6 +0 93 1 89 2 31 3 14 4 37 5 57 6 33 7 96 8 32 9 45 +0 39 1 83 2 55 3 32 4 18 5 9 6 93 7 65 8 75 9 73 +0 52 1 46 2 64 3 13 4 54 5 62 6 45 7 80 8 19 9 65 +0 72 1 4 2 29 3 94 4 85 5 51 6 29 7 65 8 50 9 16 +0 55 1 43 2 47 3 32 4 87 5 97 6 41 7 86 8 17 9 30 +0 8 1 91 2 81 3 93 4 14 5 86 6 64 7 42 8 70 9 3 +0 27 1 11 2 94 3 38 4 33 5 67 6 8 7 55 8 99 9 18 +0 34 1 86 2 87 3 10 4 64 5 30 6 47 7 51 8 69 9 26 +0 15 1 5 2 39 3 23 4 16 5 1 6 57 7 55 8 62 9 35 +0 59 1 55 2 43 3 49 4 23 5 25 6 51 7 72 8 9 9 1 +0 93 1 4 2 43 3 5 4 84 5 55 6 22 7 78 8 31 9 11 +0 20 1 91 2 73 3 41 4 100 5 38 6 75 7 9 8 76 9 71 +0 59 1 13 2 93 3 26 4 11 5 7 6 66 7 42 8 54 9 99 ++++++++++++++++++++++++++++++ +instance 7 +20 15 +0 60 1 70 2 51 3 74 4 6 5 4 6 27 7 5 8 30 9 79 10 58 11 49 12 91 13 20 14 63 +0 79 1 53 2 74 3 87 4 18 5 16 6 44 7 95 8 41 9 3 10 20 11 59 12 74 13 33 14 42 +0 94 1 57 2 19 3 77 4 70 5 90 6 36 7 73 8 37 9 24 10 28 11 23 12 16 13 97 14 75 +0 23 1 3 2 82 3 87 4 45 5 54 6 76 7 60 8 61 9 98 10 68 11 14 12 10 13 17 14 9 +0 38 1 32 2 68 3 7 4 49 5 49 6 72 7 31 8 70 9 8 10 26 11 81 12 86 13 60 14 74 +0 27 1 14 2 77 3 20 4 92 5 74 6 33 7 44 8 43 9 52 10 10 11 81 12 30 13 93 14 71 +0 23 1 55 2 67 3 6 4 64 5 68 6 19 7 73 8 92 9 96 10 3 11 21 12 51 13 3 14 25 +0 41 1 91 2 90 3 43 4 37 5 96 6 99 7 46 8 41 9 51 10 33 11 49 12 17 13 64 14 68 +0 92 1 44 2 12 3 37 4 75 5 20 6 14 7 43 8 26 9 64 10 85 11 14 12 54 13 54 14 97 +0 69 1 69 2 71 3 54 4 36 5 96 6 3 7 27 8 16 9 61 10 94 11 96 12 85 13 34 14 34 +0 16 1 38 2 36 3 48 4 92 5 20 6 55 7 89 8 75 9 57 10 89 11 62 12 36 13 36 14 69 +0 37 1 19 2 55 3 2 4 96 5 10 6 81 7 29 8 2 9 34 10 83 11 1 12 45 13 23 14 64 +0 4 1 57 2 26 3 29 4 91 5 94 6 21 7 30 8 30 9 51 10 31 11 62 12 53 13 29 14 51 +0 55 1 65 2 21 3 99 4 27 5 53 6 42 7 78 8 63 9 25 10 86 11 60 12 64 13 76 14 69 +0 17 1 70 2 33 3 81 4 24 5 35 6 77 7 21 8 83 9 19 10 44 11 70 12 90 13 34 14 90 +0 76 1 94 2 54 3 34 4 12 5 28 6 24 7 5 8 59 9 4 10 46 11 93 12 32 13 78 14 48 +0 81 1 49 2 83 3 72 4 31 5 72 6 91 7 8 8 40 9 93 10 84 11 63 12 67 13 36 14 84 +0 63 1 70 2 14 3 85 4 66 5 41 6 64 7 54 8 10 9 65 10 26 11 58 12 20 13 64 14 41 +0 98 1 39 2 91 3 5 4 55 5 28 6 43 7 97 8 35 9 23 10 50 11 99 12 59 13 63 14 95 +0 47 1 48 2 89 3 33 4 99 5 10 6 54 7 94 8 52 9 44 10 73 11 67 12 44 13 36 14 98 ++++++++++++++++++++++++++++++ +instance 8 +20 5 +0 34 1 6 2 63 3 85 4 60 +0 11 1 65 2 4 3 1 4 73 +0 63 1 67 2 3 3 73 4 100 +0 22 1 46 2 88 3 1 4 66 +0 76 1 4 2 34 3 9 4 76 +0 20 1 22 2 7 3 3 4 28 +0 44 1 30 2 55 3 68 4 92 +0 29 1 89 2 12 3 96 4 71 +0 54 1 12 2 21 3 74 4 2 +0 62 1 96 2 61 3 79 4 53 +0 50 1 13 2 48 3 40 4 37 +0 89 1 69 2 57 3 1 4 70 +0 50 1 56 2 8 3 67 4 46 +0 32 1 24 2 23 3 87 4 62 +0 12 1 88 2 64 3 14 4 13 +0 59 1 78 2 95 3 59 4 48 +0 41 1 20 2 83 3 65 4 20 +0 94 1 48 2 26 3 93 4 3 +0 28 1 59 2 10 3 81 4 20 +0 66 1 33 2 34 3 8 4 5 ++++++++++++++++++++++++++++++ +instance 9 +20 15 +0 59 1 11 2 4 3 79 4 94 5 31 6 74 7 82 8 53 9 51 10 19 11 31 12 46 13 47 14 10 +0 72 1 54 2 36 3 3 4 59 5 23 6 40 7 59 8 89 9 37 10 85 11 67 12 39 13 65 14 60 +0 92 1 26 2 15 3 81 4 86 5 56 6 92 7 47 8 93 9 21 10 40 11 77 12 84 13 10 14 91 +0 49 1 27 2 99 3 64 4 30 5 51 6 26 7 89 8 40 9 64 10 60 11 67 12 67 13 100 14 3 +0 42 1 12 2 55 3 62 4 37 5 24 6 24 7 42 8 41 9 88 10 14 11 33 12 85 13 4 14 20 +0 21 1 61 2 52 3 49 4 44 5 98 6 26 7 68 8 61 9 25 10 6 11 46 12 75 13 37 14 5 +0 80 1 99 2 88 3 83 4 11 5 93 6 47 7 80 8 100 9 87 10 84 11 17 12 43 13 93 14 58 +0 4 1 54 2 43 3 63 4 44 5 78 6 44 7 39 8 76 9 99 10 29 11 38 12 14 13 75 14 25 +0 46 1 23 2 54 3 77 4 60 5 53 6 42 7 72 8 90 9 11 10 22 11 68 12 94 13 24 14 14 +0 23 1 84 2 92 3 94 4 8 5 10 6 77 7 58 8 64 9 95 10 55 11 15 12 19 13 62 14 67 +0 53 1 91 2 80 3 8 4 41 5 89 6 3 7 87 8 57 9 75 10 37 11 8 12 23 13 88 14 65 +0 72 1 17 2 53 3 36 4 9 5 24 6 80 7 9 8 28 9 60 10 94 11 99 12 67 13 10 14 44 +0 5 1 44 2 96 3 37 4 21 5 44 6 49 7 13 8 86 9 74 10 89 11 3 12 82 13 85 14 61 +0 80 1 19 2 73 3 95 4 78 5 78 6 31 7 13 8 50 9 93 10 98 11 80 12 46 13 9 14 37 +0 7 1 16 2 46 3 82 4 97 5 82 6 41 7 21 8 11 9 50 10 5 11 28 12 95 13 84 14 45 +0 68 1 73 2 57 3 4 4 66 5 71 6 87 7 43 8 60 9 56 10 30 11 21 12 14 13 37 14 61 +0 77 1 2 2 1 3 82 4 2 5 49 6 89 7 27 8 34 9 52 10 85 11 26 12 80 13 87 14 58 +0 17 1 86 2 32 3 35 4 6 5 50 6 53 7 39 8 94 9 89 10 22 11 75 12 59 13 74 14 27 +0 61 1 14 2 70 3 58 4 24 5 36 6 70 7 57 8 31 9 100 10 21 11 76 12 54 13 94 14 57 +0 29 1 6 2 6 3 12 4 78 5 28 6 40 7 13 8 61 9 19 10 39 11 98 12 69 13 14 14 3 ++++++++++++++++++++++++++++++ +instance 10 +50 10 +0 100 1 72 2 76 3 100 4 16 5 9 6 5 7 87 8 34 9 15 +0 19 1 3 2 19 3 68 4 29 5 22 6 16 7 13 8 87 9 70 +0 70 1 56 2 39 3 71 4 29 5 91 6 100 7 86 8 88 9 99 +0 50 1 93 2 100 3 71 4 84 5 64 6 67 7 29 8 28 9 81 +0 80 1 97 2 3 3 10 4 14 5 32 6 92 7 67 8 72 9 68 +0 47 1 59 2 29 3 3 4 26 5 20 6 50 7 26 8 1 9 70 +0 40 1 63 2 69 3 21 4 56 5 73 6 56 7 10 8 46 9 40 +0 84 1 80 2 68 3 82 4 4 5 45 6 100 7 96 8 29 9 67 +0 85 1 46 2 59 3 35 4 68 5 84 6 89 7 18 8 97 9 58 +0 60 1 60 2 2 3 50 4 90 5 20 6 78 7 56 8 62 9 27 +0 78 1 64 2 21 3 5 4 85 5 55 6 15 7 23 8 36 9 87 +0 98 1 31 2 42 3 73 4 83 5 48 6 71 7 49 8 72 9 30 +0 4 1 57 2 30 3 11 4 67 5 4 6 82 7 77 8 98 9 21 +0 45 1 45 2 25 3 45 4 7 5 59 6 88 7 42 8 57 9 81 +0 73 1 94 2 83 3 59 4 1 5 72 6 65 7 62 8 45 9 76 +0 77 1 84 2 11 3 82 4 10 5 9 6 67 7 27 8 43 9 8 +0 22 1 66 2 5 3 77 4 97 5 28 6 61 7 82 8 62 9 96 +0 90 1 51 2 87 3 27 4 65 5 76 6 67 7 20 8 75 9 67 +0 12 1 92 2 43 3 21 4 92 5 64 6 94 7 67 8 60 9 46 +0 9 1 76 2 62 3 46 4 71 5 65 6 76 7 65 8 30 9 38 +0 29 1 12 2 71 3 70 4 46 5 96 6 12 7 70 8 76 9 19 +0 83 1 15 2 73 3 32 4 51 5 6 6 3 7 29 8 3 9 24 +0 83 1 95 2 87 3 29 4 46 5 67 6 89 7 73 8 69 9 33 +0 83 1 46 2 82 3 2 4 55 5 54 6 85 7 3 8 20 9 57 +0 11 1 32 2 15 3 27 4 2 5 43 6 23 7 79 8 28 9 29 +0 10 1 74 2 73 3 99 4 54 5 89 6 83 7 5 8 28 9 90 +0 73 1 40 2 4 3 20 4 51 5 18 6 37 7 18 8 61 9 75 +0 85 1 30 2 58 3 89 4 48 5 15 6 82 7 77 8 2 9 3 +0 56 1 63 2 26 3 87 4 53 5 8 6 80 7 46 8 5 9 62 +0 59 1 67 2 73 3 65 4 60 5 61 6 94 7 86 8 38 9 1 +0 70 1 66 2 80 3 32 4 93 5 56 6 26 7 41 8 21 9 9 +0 4 1 66 2 79 3 43 4 39 5 83 6 55 7 25 8 62 9 13 +0 51 1 42 2 90 3 85 4 84 5 29 6 73 7 8 8 95 9 57 +0 18 1 30 2 61 3 67 4 57 5 60 6 25 7 10 8 20 9 95 +0 61 1 9 2 3 3 2 4 61 5 18 6 44 7 78 8 38 9 74 +0 25 1 91 2 31 3 2 4 14 5 97 6 91 7 84 8 88 9 26 +0 84 1 8 2 95 3 61 4 85 5 41 6 88 7 4 8 86 9 51 +0 74 1 2 2 24 3 42 4 33 5 24 6 62 7 13 8 62 9 10 +0 33 1 7 2 62 3 68 4 42 5 41 6 78 7 67 8 99 9 6 +0 38 1 43 2 2 3 4 4 62 5 95 6 76 7 91 8 67 9 78 +0 43 1 98 2 28 3 51 4 43 5 84 6 13 7 71 8 64 9 81 +0 15 1 19 2 50 3 30 4 75 5 90 6 94 7 35 8 51 9 83 +0 75 1 98 2 42 3 67 4 24 5 63 6 15 7 45 8 92 9 44 +0 29 1 60 2 80 3 86 4 70 5 13 6 100 7 86 8 88 9 6 +0 14 1 49 2 78 3 93 4 45 5 94 6 35 7 46 8 18 9 85 +0 29 1 20 2 27 3 66 4 70 5 95 6 7 7 11 8 75 9 52 +0 73 1 19 2 33 3 36 4 93 5 21 6 44 7 51 8 4 9 24 +0 87 1 79 2 52 3 85 4 24 5 89 6 50 7 4 8 37 9 50 +0 86 1 99 2 31 3 25 4 78 5 10 6 41 7 66 8 35 9 1 +0 2 1 41 2 41 3 88 4 6 5 77 6 89 7 80 8 21 9 54 ++++++++++++++++++++++++++++++ + diff --git a/pfsp_simulated_annealing/__init__.py b/pfsp_simulated_annealing/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/pfsp_simulated_annealing/data/input.txt b/pfsp_simulated_annealing/data/input.txt new file mode 100644 index 0000000..4fc330d --- /dev/null +++ b/pfsp_simulated_annealing/data/input.txt @@ -0,0 +1,21 @@ +20 10 +0 96 1 80 2 56 3 48 4 14 5 88 6 50 7 15 8 67 9 65 +0 25 1 44 2 10 3 41 4 64 5 52 6 19 7 28 8 72 9 27 +0 76 1 62 2 48 3 54 4 47 5 35 6 72 7 54 8 27 9 56 +0 41 1 6 2 3 3 33 4 77 5 44 6 43 7 50 8 19 9 43 +0 65 1 91 2 75 3 30 4 47 5 55 6 51 7 1 8 36 9 73 +0 81 1 69 2 65 3 93 4 61 5 3 6 44 7 17 8 6 9 14 +0 49 1 9 2 12 3 54 4 75 5 66 6 34 7 12 8 32 9 6 +0 93 1 89 2 31 3 14 4 37 5 57 6 33 7 96 8 32 9 45 +0 39 1 83 2 55 3 32 4 18 5 9 6 93 7 65 8 75 9 73 +0 52 1 46 2 64 3 13 4 54 5 62 6 45 7 80 8 19 9 65 +0 72 1 4 2 29 3 94 4 85 5 51 6 29 7 65 8 50 9 16 +0 55 1 43 2 47 3 32 4 87 5 97 6 41 7 86 8 17 9 30 +0 8 1 91 2 81 3 93 4 14 5 86 6 64 7 42 8 70 9 3 +0 27 1 11 2 94 3 38 4 33 5 67 6 8 7 55 8 99 9 18 +0 34 1 86 2 87 3 10 4 64 5 30 6 47 7 51 8 69 9 26 +0 15 1 5 2 39 3 23 4 16 5 1 6 57 7 55 8 62 9 35 +0 59 1 55 2 43 3 49 4 23 5 25 6 51 7 72 8 9 9 1 +0 93 1 4 2 43 3 5 4 84 5 55 6 22 7 78 8 31 9 11 +0 20 1 91 2 73 3 41 4 100 5 38 6 75 7 9 8 76 9 71 +0 59 1 13 2 93 3 26 4 11 5 7 6 66 7 42 8 54 9 99 \ No newline at end of file diff --git a/pfsp_simulated_annealing/data/trace.txt b/pfsp_simulated_annealing/data/trace.txt new file mode 100644 index 0000000..b6a1d01 --- /dev/null +++ b/pfsp_simulated_annealing/data/trace.txt @@ -0,0 +1 @@ +7180 7251 7251 7251 7251 7266 7248 7252 7407 7407 7407 7428 7428 7238 7238 7148 7148 7148 7278 7278 7235 7235 7235 7164 7170 7156 7152 7152 7133 7169 7119 7119 7119 7182 7284 7284 7217 7225 7204 7204 7133 7086 7086 7362 7381 7435 7435 7435 7407 7377 7334 7364 7364 7364 7384 7384 7280 7314 7527 7473 7446 7446 7441 7522 7522 7522 7495 7495 7495 7495 7495 7495 7495 7470 7483 7485 7483 7483 7483 7563 7557 7528 7528 7528 7605 7499 7587 7754 7754 7831 7831 7597 7597 7597 7597 7597 7505 7505 7532 7566 7616 7616 7649 7649 7649 7768 7560 7560 7560 7558 7553 7553 7553 7553 7603 7617 7617 7637 7881 7881 7881 7881 7888 7888 7888 7914 7914 7914 7994 7987 7987 7975 8023 8023 8023 8084 8057 8057 8057 8057 8057 8057 8057 8057 8057 8057 8057 8117 8148 8148 8148 8243 8150 8186 8186 8186 8311 8311 8267 8267 8241 8169 8169 8169 8292 8292 8292 8292 8381 8381 8329 8329 8329 8246 8246 8246 8246 8255 8089 8170 8137 8137 8136 8136 8136 8136 7986 7986 8020 7935 7935 7756 7756 8141 8141 8541 8541 8541 8541 8565 8565 8565 8565 8590 8594 8594 8594 8594 8594 8594 8556 8638 8638 8638 8638 8638 8638 8638 8638 8638 8638 8638 8638 8638 8638 8638 8638 8638 8638 8638 8638 8638 8638 8457 8470 8309 8309 8352 8352 8275 8275 8195 8195 8195 8195 8025 8019 8019 8019 8019 8157 8157 8157 8107 8107 8273 8273 8273 8273 8306 8309 8309 8309 8272 8272 8257 8257 8138 8138 7974 7974 8069 8101 8101 8101 8101 8101 8337 8337 8337 8281 8281 8281 8277 8123 8123 8119 8119 8119 8119 8128 8128 8021 7974 7987 7987 7987 7986 7967 7967 7967 8151 8151 8168 8167 8167 8111 8166 8238 8238 8238 8238 8231 8231 8231 8231 8231 8231 8180 8216 8269 8246 8246 8246 8246 8251 8251 8251 8166 8166 8166 8166 8166 8166 8136 8136 8053 8053 8053 8053 8090 7932 7932 8306 8306 8306 8306 8306 8306 8331 8331 7934 8032 8032 8032 8032 8078 8034 7952 7952 7952 7952 7984 7984 8011 7973 7966 8048 8048 8048 8048 8048 8048 8048 8048 7949 7952 7946 7955 7863 8120 8157 8157 8157 8157 8110 8110 7964 7932 7932 7932 7932 7932 7932 7904 7605 7605 7605 7604 7604 7533 7545 7429 7429 7429 7429 7429 7388 7388 7388 7388 6971 7035 7035 7048 7045 7045 7080 7080 7080 7273 7285 7311 7445 7445 7508 7508 7508 7595 7595 7595 7626 7727 7727 7727 7812 7881 7881 7881 7881 7812 7812 7890 7890 7738 7760 7760 7760 7759 7847 7847 7682 7676 7676 7899 7709 7647 7605 7605 7605 7600 7600 7600 7630 7600 7584 7584 7584 7584 7902 7777 7777 7704 7704 7704 7682 7682 7761 7761 7761 7761 7766 7766 7569 7516 7516 7516 7516 7516 7571 7571 7571 7571 7571 7469 7700 7739 7558 7531 7531 7610 7500 7500 7393 7393 7427 7477 7477 7477 7565 7565 7574 7548 7548 7455 7455 7477 7454 7536 7449 7450 7450 7450 7422 7422 7422 7422 7522 7522 7533 7533 7760 7738 7842 7842 7842 7842 7842 7615 7615 7642 7642 7642 7634 7634 7634 7634 7682 7733 7733 7733 7733 7733 7733 7733 7733 7733 7671 7671 7671 7459 7605 7527 7527 7181 7170 7138 7138 7209 7324 7324 7324 7324 7330 7330 7253 7253 7219 7396 7218 7178 7229 7272 7272 7272 7339 7511 7542 7565 7565 7565 7565 7622 7622 7724 7724 7724 7724 7730 7526 7578 7415 7415 7415 7391 7391 7392 7142 7142 7142 7142 7113 7174 7174 7174 7230 7230 7230 7535 7535 7536 7472 7472 7472 7485 7689 8004 8247 8247 8184 8112 8112 7959 7915 7915 8008 8008 8045 7957 7994 8015 8015 8015 8055 8055 8088 8088 8088 8088 8088 8088 8088 8088 8088 8005 7859 7859 7879 7824 7824 7824 7824 7824 7824 7824 7824 7854 7715 7708 7708 7963 7970 7970 7970 7970 7643 7643 7586 7586 7586 7586 7586 7586 7586 7586 7586 7586 7586 7694 7694 7636 7636 7612 7612 7612 7612 7612 7908 7908 7954 7603 7603 7603 7603 7432 7432 7523 7310 7310 7313 7060 7408 7395 7395 7411 7411 7106 7106 7115 7286 7289 7275 7275 7257 7257 7210 7210 7241 7318 7302 7302 7302 7302 7258 7258 7491 7756 7756 7671 7671 7688 7654 7587 7634 7634 7634 7634 7625 7625 7625 7553 7553 7665 7665 7688 7688 7985 7985 8113 8113 8099 8099 8138 8138 8138 8138 8326 8358 8305 8152 8152 8152 8152 8152 8152 8152 8152 8004 8004 8004 8004 8004 8004 8054 8054 8012 8038 8038 8033 8033 8097 8064 7769 8028 8028 8028 8054 8061 8061 8030 8028 8028 7687 7687 7489 7489 7489 7489 7489 7489 7489 7489 7435 7435 7435 7435 7435 7463 7174 7174 7174 7174 7174 7174 6955 6955 7039 7039 7039 7079 7184 7184 7203 7240 7350 7350 7350 7350 7763 7786 7772 7772 7772 7772 7820 7820 7820 7820 7820 7851 7851 7792 7792 7792 7792 7792 7792 7792 7792 7792 7792 7774 7774 7774 7774 7797 7797 7797 7797 7797 7797 7797 7797 7841 7683 7819 7819 7649 7649 7616 7616 7609 7609 7593 7593 7618 7618 7663 7676 7607 7615 7646 7646 7646 7646 7646 7646 7379 7464 7412 7374 7419 7282 7397 7397 7423 7423 7397 7445 7600 7600 7600 7663 7663 7325 7325 7332 7354 7354 7397 7397 7397 7426 7426 7426 7434 7542 7486 7462 7462 7462 7379 7417 7410 7410 7410 7410 7344 7344 7344 7344 7344 7344 7236 7236 7236 7236 7215 7234 7213 7264 7257 7314 7314 7314 7314 7549 7702 7652 7652 7652 7652 7652 7645 7645 7645 7604 7610 7650 7650 7650 7650 7650 7565 7565 7565 7565 7565 7492 7345 7345 7345 7343 7343 7343 7390 7390 7393 7436 7436 7436 7433 7433 7597 7482 7408 7408 7554 7581 7581 7581 7581 7721 7691 7691 7691 7691 7691 7691 7717 8013 7935 7896 7896 7935 7891 7891 7891 7891 7891 7891 7891 7954 8098 8098 8098 8098 8121 8121 8090 8151 8151 8151 8184 8184 8184 8167 8167 8275 8268 8268 8268 8268 8268 8104 8098 8025 8025 8025 8025 8025 8025 8025 8025 8025 8025 8025 8025 8025 8025 7926 7914 7914 7914 7914 7914 7914 7732 7732 7723 7806 7868 7868 7868 7868 7868 7869 7843 7843 7834 7834 7805 7805 7805 7805 7705 7686 7686 7684 7684 7684 7684 7684 7544 7544 7491 7549 7534 7511 7360 7570 7614 7569 7569 7486 7583 7583 7583 7627 7224 7310 7335 7335 7353 7221 7183 7183 7183 7183 7139 7094 7094 7064 7071 7152 7205 7215 7020 7086 7230 7230 7199 7039 7138 7138 7072 7033 7029 6944 6863 6904 6898 6737 6941 6941 6887 7074 7044 6981 6981 7145 7273 7273 7273 7273 7273 7273 7237 7092 7092 7087 7087 7087 7148 6987 7302 7302 7329 7329 7329 7490 7362 7427 7424 7347 7443 7444 7444 7444 7444 7444 7444 7438 7135 7135 7135 7135 7135 7095 7125 7125 7125 7114 7022 7081 7081 7081 7037 7037 7037 7087 7051 7070 7070 7070 7351 7371 7371 7371 7371 7371 7371 7371 7371 7371 7371 7295 7295 7295 7295 7269 7269 7394 7400 7426 7426 7416 7416 7416 7672 7698 7698 7657 7678 7678 7670 7670 7944 7841 7815 7721 7774 7618 7744 7744 7747 7747 7666 7666 7666 7660 7660 7702 7712 7712 7712 7797 7797 7797 7797 7797 7752 7752 7742 7742 7742 7742 7742 7742 7742 7783 7782 7949 7799 7799 7799 7799 7799 7808 7808 7808 7808 7823 7823 7823 7823 7823 7920 7890 7890 7890 7890 7890 7915 7837 7874 7869 7892 7860 7860 7866 7866 7909 7909 7909 7909 7909 7964 7964 7946 7944 7944 7944 7936 7822 7840 7847 7847 7847 7847 7847 7847 7847 7847 7847 7847 7847 7847 7877 7877 7877 7933 7933 7873 7873 7873 7873 7873 7838 7915 7915 7915 7915 7915 7915 7915 7915 7915 7940 7940 7940 7776 7865 7809 7809 7902 7902 7908 7902 7902 7904 7900 7900 7900 7787 7770 7778 7778 7790 7790 7790 7790 7790 7790 7777 7765 7765 7765 7765 7765 7765 7734 7734 7734 7734 7680 7680 7661 7614 7614 7614 7614 7496 7496 7496 7496 7496 7535 7535 7213 7135 7070 7070 7087 7400 7461 7479 7479 7479 7479 7479 7479 7479 7572 7572 7552 7523 7523 7523 7518 7518 7438 7438 7457 7457 7689 7689 7733 7733 7751 7751 7751 7696 7673 7673 7639 7648 7648 7639 7391 7391 7530 7634 7634 7634 7634 7713 7713 7650 7631 7631 7606 7606 7606 7626 7626 7626 7624 7624 7624 7624 7624 7624 7606 7567 7567 7567 7567 7504 7691 7848 7848 7848 7900 7900 7900 7900 7896 7896 7896 7976 7976 7857 7857 7940 7850 7850 7882 7882 7882 7889 7889 7889 7889 7889 7889 7889 7976 7976 7987 7725 7725 7725 7530 7530 7530 7530 7530 7581 7922 7922 7907 7907 7697 7717 7744 7759 7858 7858 7840 7840 7896 7896 7896 7896 7896 7896 7896 7896 7896 7896 7896 7879 7923 7923 7923 7923 7923 7923 7639 7768 7768 7809 7708 7708 7641 7666 7666 7514 7560 7560 7560 7532 7532 7765 7663 7663 7671 7727 7580 7580 7580 7493 7493 7447 7439 7539 7623 7703 7703 7703 7703 7703 7703 7502 7502 7502 7485 7485 7460 7460 7312 7349 7327 7327 7327 7324 7392 7413 7413 7517 7595 7595 7532 7532 7538 7607 7607 7524 7541 7541 7415 7415 7392 7392 7392 7392 7392 7392 7392 7506 7530 7529 7529 7529 7529 7618 7618 7618 7618 7444 7450 7450 7346 7266 7266 7266 7266 7362 7340 7340 7468 7537 7716 7716 7716 7924 7924 7924 7924 7858 7984 7984 7984 7984 7984 7984 7984 7984 7984 8181 8181 8181 8301 8301 8301 8301 8301 8301 8301 8301 8301 8301 8301 8301 8301 8301 7926 7926 7926 7926 7812 7841 7612 7612 7612 7712 7712 7712 7853 7853 7853 7890 7890 7890 7890 7890 7890 8091 8091 8201 8125 8253 8235 8235 8235 7773 7773 7775 7713 7713 7713 7462 7140 7181 7181 7181 7181 6928 6928 6928 6928 6928 6928 6928 6928 6928 6959 6934 6956 6956 6962 6910 6910 6910 6910 6989 6983 6983 6942 6942 6942 6942 7345 7345 7345 7501 7319 7335 7335 7371 7366 7366 7366 7366 7366 7335 7269 7269 7269 7269 7269 7243 7225 7225 7345 7455 7464 7486 7483 7483 7483 7751 7702 7691 7691 7650 7650 7650 7650 7682 7399 7525 7525 7525 7525 7525 7525 7248 7248 7247 7256 7312 7333 7333 7340 7593 7593 7495 7495 7495 7726 7726 7726 7726 7726 7726 7726 7726 7722 7722 7722 7722 7382 7475 7475 7475 7730 7717 7756 7756 7756 7756 7756 7757 7717 7717 7717 7717 7717 7751 7686 7389 7374 7388 7487 7487 7487 7613 7603 7671 7671 7671 7654 7633 7626 7626 7626 7626 7626 7321 7321 7474 7474 7474 7483 7414 7414 7437 7449 7472 7481 7481 7412 7545 7545 7545 7545 7545 7709 7709 7709 7932 7970 7970 7970 7774 7729 7729 7565 7565 7448 7448 7448 7448 7448 7448 7514 7514 7479 7478 7445 7445 7397 7397 7397 7397 7323 7242 7242 7242 7242 7303 7276 7276 7276 7276 7276 7350 7334 7259 7250 7249 7249 7249 7249 7249 7324 7324 7324 7344 7268 7167 7167 7167 7167 7167 7167 7167 7167 7167 7212 7212 7420 7420 7289 7199 7199 7194 7194 7255 7255 7170 7262 7262 7262 7185 7176 7165 7247 7247 7165 7134 7129 7129 7129 7277 7277 7277 7277 7362 7362 7304 7304 7304 7304 7304 7221 7221 7221 7235 7240 7219 7358 7454 7454 7454 7454 7454 7454 7468 7468 7545 7545 7545 7545 7545 7379 7379 7379 7344 7362 7362 7400 7371 7371 7371 7371 7352 7352 7352 7352 7469 7228 7260 7265 7265 7447 7538 7556 7538 7582 7582 7582 7582 7582 7382 7382 7395 7390 7373 7373 7477 7744 7696 7641 7601 7622 7622 7622 7588 7588 7588 7645 7645 7616 7616 7616 7616 7616 7616 7616 7695 7695 7695 7695 7824 7824 7815 7815 7815 7808 7808 7808 7808 7808 7808 7808 7831 7831 7694 7694 7735 7735 7717 7809 7809 7790 7790 7927 7891 7746 8003 8003 8003 8003 7857 7950 7950 7922 7922 7951 7951 7951 7696 7696 7652 7652 7895 7895 7895 7831 7882 7882 7882 7927 7927 7927 7938 7937 7937 7937 7937 7942 7942 7973 7973 7973 7978 7929 7863 7863 7816 7816 7811 7811 7811 7811 7811 7880 7880 7880 7917 7917 7917 7917 7917 7917 7917 7918 7918 7917 7917 7974 7974 7974 8014 8014 8030 7724 7724 7724 7744 7744 7742 7742 7420 7420 7420 7420 7420 7084 7084 7096 7359 7359 7359 7344 7344 7344 7344 7344 7344 7358 7358 7527 7516 7516 7553 7553 7553 7553 7553 7553 7553 7729 7560 7560 7560 7441 7441 7449 7486 7524 7524 7505 7505 7505 7510 7516 7384 7421 7437 7437 7461 7565 7565 7714 7692 7748 7748 7748 7748 7667 7667 7667 7683 7683 7752 7752 7752 7752 7752 7752 7752 7718 7506 7574 7607 7616 7616 7754 7696 7696 7696 7696 7696 7696 7555 7555 7555 7555 7610 7565 7565 7672 7672 7691 7691 7691 7762 7701 7701 7701 7740 7740 7757 7757 7898 7950 7950 7869 7869 7938 7938 7938 7938 7938 7938 7938 7938 7938 7938 7879 7861 7837 7837 7707 7707 7707 7542 7542 7483 7355 7204 7204 7230 7204 7204 7128 7128 7135 7135 7135 7135 7135 7279 7332 7332 7332 7332 7349 7342 7342 7342 7342 7342 7342 7322 7354 7348 7348 7295 7295 7295 7253 7449 7449 7502 7607 7607 7607 7607 7585 7680 7495 7402 7402 7402 7395 7369 7341 7265 7211 7191 7541 7541 7541 7615 7665 7665 7665 7708 7708 7732 7732 7702 7702 7674 7674 7674 7674 7422 7279 7279 7307 7307 7307 7307 7307 7349 7465 7441 7441 7441 7441 7441 7534 7534 7369 7369 7420 7420 7420 7502 7502 7502 7604 7488 7488 7392 7392 7421 7421 7449 7487 7439 7439 7439 7439 7483 7483 7483 7421 7430 7430 7430 7430 7598 7598 7598 7598 7598 7748 7748 7720 7735 7766 7571 7571 7571 7579 7579 7543 7543 7543 7597 7597 7597 7597 7597 7594 7562 7549 7549 7549 7549 7451 7451 7497 7596 7357 7440 7400 7400 7400 7405 7400 7400 7461 7435 7464 7464 7315 7315 7315 7315 7219 7219 7235 7235 7235 7243 7195 7195 7303 7288 7288 7288 7288 7288 7288 7288 7276 7276 7276 7201 7201 7201 7201 7201 7201 7076 7222 7286 7310 7346 7253 7278 7319 7319 7311 7316 7316 7420 7420 7420 7415 7419 7506 7506 7464 7464 7464 7464 7359 7359 7359 7359 7268 7315 7315 7315 7424 7424 7424 7424 7510 7507 7507 7507 7478 7478 7478 7478 7478 7465 7465 7486 7486 7291 7291 7223 7223 7236 7236 7240 7065 7065 7090 7059 7222 7222 7222 7222 7222 7171 7298 7272 7238 7238 7238 7238 7337 7337 7463 7463 7464 7464 7490 7490 7490 7413 7413 7413 7413 7413 7418 7608 7437 7437 7387 7387 7387 7387 7387 7387 7387 7387 7313 7313 7313 7313 7313 7313 7313 7313 7313 7236 7405 7456 7456 7496 7487 7487 7487 7487 7480 7480 7480 7480 7480 7519 7519 7519 7519 7519 7519 7481 7481 7610 7624 7624 7479 7575 7575 7575 7481 7552 7552 7552 7418 7418 7418 7418 7418 7418 7488 7579 7579 7579 7579 7579 7579 7581 7589 7650 7854 7854 7854 7854 7854 7854 7854 7855 7902 7887 7887 7887 7887 7898 8074 8079 8079 8079 8079 8079 8079 8079 8072 8063 8095 8095 8095 8095 8095 8095 8095 8080 8082 8085 8085 8085 8085 8085 8085 8085 8134 8171 7934 7934 7934 7934 7934 7911 7577 7564 7564 7564 7510 7510 7510 7457 7457 7487 7493 7560 7394 7394 7746 7692 7756 7756 7756 7793 7764 7764 7764 7764 7764 7764 7550 7493 7112 7112 7102 7118 7118 6972 6974 7133 7133 7157 7157 7157 7157 7157 7163 7163 7110 7110 7110 7073 7121 7176 6990 6942 6942 7236 7236 7236 7236 7236 7225 7429 7429 7470 7518 7433 7392 7441 7441 7455 7454 7477 7686 7686 7695 7695 7665 7641 7641 7641 7641 7671 7652 8009 8009 7974 7949 7949 7949 7949 8049 7995 7995 7995 7995 7978 7978 7937 7937 7947 7909 7919 7879 7879 7879 7879 7879 7884 7884 7972 7972 7884 7896 7896 7906 7893 7940 7940 7852 7852 7867 7868 7868 7868 7830 7890 7890 7918 7910 7921 7921 7861 8010 8010 7956 7956 7455 7463 7463 7466 7335 7335 7335 7366 7366 7407 7407 7407 7407 7407 7446 7549 7549 7549 7497 7497 7497 7540 7540 7589 7589 7589 7589 7619 7619 7619 7619 7619 7673 7762 7568 7568 7568 7676 7676 7676 7676 7676 7704 7704 7704 7704 7750 7923 7976 7976 7961 7989 7943 7943 7943 7943 7943 7882 7882 7882 7882 7882 7882 7882 7882 7882 7882 7870 7870 7653 7621 7472 7465 7465 7664 7554 7570 7570 7570 7575 7575 7575 7631 7641 7641 7663 7663 7663 7744 7744 7744 7758 7758 7758 7758 7758 7758 7677 7930 7780 7780 7764 7764 7621 7621 7655 7713 7713 7713 7713 7520 7520 7520 7614 7614 7614 7565 7549 7549 7511 7511 7315 7315 7181 7181 7376 7432 7447 7447 7447 7668 7668 7668 7668 7521 7528 7528 7382 7401 7425 7425 7381 7381 7381 7381 7394 7490 7544 7627 7627 7627 7627 7627 7627 7627 7749 7753 7753 7753 7753 7753 7753 7753 7776 7780 7780 7780 7780 7697 7608 7636 7636 7636 7636 7636 7636 7674 7674 7674 7674 7630 7522 7522 7522 7522 7522 7522 7835 7835 7881 7770 7943 7953 7953 8092 8148 8148 8186 8186 8186 8164 8164 8195 8195 8245 8245 8262 8262 8208 8157 8092 8092 7924 7924 7924 7924 7843 7843 7750 7823 7823 7823 7823 7823 7823 7823 7823 7802 7736 7712 7712 7712 7712 7712 7835 7865 7865 7865 7898 7898 7903 7839 7839 7839 7839 7839 7839 7839 7839 7839 7839 7839 7517 7517 7637 7637 7670 7670 7639 7639 7639 7639 7448 7448 7448 7448 7357 7357 7072 7072 7035 7035 7038 7038 7038 7122 7122 7029 7029 7022 7022 7022 7005 7259 7017 7017 7003 7003 6962 7030 7030 7030 7030 7030 7044 7044 7044 7044 7044 7044 7044 7013 7013 7013 7013 7053 7053 7053 7053 7094 7044 7154 7154 7201 7208 7039 7039 7039 7039 6951 6951 6951 6951 6951 6951 6951 6999 6999 6999 6999 6999 6999 6999 6999 6999 6819 6811 6811 6836 6890 6890 6890 6890 6890 6890 6890 6890 6890 6946 6931 6921 6892 7165 7165 7165 7165 7031 6981 6985 7164 7164 7235 7173 7173 7173 7173 7173 7197 7124 7124 7124 7124 7124 7124 7124 6883 6927 6927 7005 7005 6983 7042 7051 7124 7124 7266 7266 7266 7266 7186 7186 7186 7186 7186 7186 7107 7107 7107 7115 7115 7164 7164 7164 7164 7164 7164 7179 7228 7263 7263 7263 7165 7315 7280 7280 7280 7280 7280 7248 7248 7248 7248 7287 7287 7293 7293 7221 7091 7091 7091 7091 7091 6939 6939 6939 6939 6939 7018 7024 7024 7024 7024 7024 6999 6999 6999 6999 7180 7174 7174 7190 7190 7190 7190 7370 7376 7353 7306 7306 7306 7306 7306 7316 7316 7316 7414 7414 7421 7421 7301 7376 7376 7376 7133 7133 7133 7133 7192 7565 7565 7621 7568 7568 7568 7568 7568 7553 7602 7600 7612 7612 7612 7385 7603 7603 7568 7568 7384 7384 7384 7459 7200 7158 7158 6949 6949 7024 7131 7133 7133 7133 7168 7168 7168 7154 7200 7200 7066 7066 7066 7066 7073 7073 7073 7073 7073 7073 7073 7073 7073 7073 7076 7076 7076 6969 6983 6983 6983 6983 6983 6961 7052 7266 7277 7277 7277 7277 7282 7282 7282 7282 7209 7209 7209 7356 7356 7350 7377 7377 7421 7381 7381 7381 7401 7416 7416 7416 7370 7475 7491 7491 7491 7466 7309 7309 7309 7309 7309 7243 7492 7351 7351 7351 7351 7351 7221 7221 7221 7221 7261 7261 7250 7250 7339 7161 7197 7183 7183 7183 7147 7201 7201 7201 7201 7201 7201 6923 6923 6923 7206 7195 7198 7198 7480 7480 7453 7453 7453 7453 7453 7431 7465 7633 7911 7911 7880 7880 7944 7925 7925 7925 7925 7925 7968 7826 7859 7939 7939 7939 7931 7975 7975 7960 7960 7960 7960 7960 7960 7960 7960 7909 7909 7909 7890 7947 7947 7934 7949 7949 7813 7802 7773 7773 7773 7773 7773 7773 7773 7208 7208 7133 7228 7228 7171 7171 7171 7097 7097 7097 7097 7097 7097 7097 7170 7232 7178 7178 7145 7145 7207 7207 7190 7190 7190 7190 7252 7252 7227 7227 7161 7161 7161 7161 7161 7161 7161 7179 7258 7182 7182 7239 7221 7221 7242 7181 7181 7181 7181 6902 6902 6972 6972 6972 6972 6972 7026 7026 7068 7068 7074 7074 7063 7063 7090 7338 7325 7252 7263 7263 7263 7263 7346 7346 7346 7337 7337 7337 7329 7329 7329 7253 7176 7140 7140 7150 7150 7150 7150 7150 7150 7150 7150 7159 7159 7124 7124 7124 7124 7124 7124 7124 7096 6979 6986 6955 6955 6955 6955 6955 6870 6870 6863 6902 6902 6902 6902 6902 6887 6887 6925 6925 6919 6919 6941 6784 6784 6724 6724 6724 6724 6724 6762 6762 6711 6719 6719 6719 6655 6364 6379 6391 6391 6371 6434 6802 6802 6802 6802 6793 6793 6803 6803 6803 6803 6803 6858 6727 6952 6933 6791 6812 6859 6900 6900 6900 6882 6887 6887 7121 7117 7098 7098 7109 7109 7193 7193 7193 7209 7209 7209 7209 7209 7425 7421 7421 7421 7411 7411 7411 7411 7460 7463 7463 7463 7459 7630 7630 7630 7630 7630 7630 7630 7630 7630 7608 7683 7645 7645 7645 7645 7660 7584 7584 7584 7584 7506 7394 7369 7369 7295 7257 7257 7300 7300 7318 7318 7318 7300 7299 7299 7299 7354 7287 7273 7273 7273 7273 7211 7211 7211 7229 7208 7208 7208 7208 7208 7208 7208 7222 7222 7240 7293 7293 7249 7249 7247 7247 7247 7247 7247 7247 7247 7247 7247 7247 7247 7201 7201 7182 7182 7182 7182 7182 7182 7195 7066 7066 7066 7026 7026 7039 7039 7256 7258 7258 7252 7559 7559 7530 7530 7573 7504 7504 7504 7504 7648 7648 7648 7648 7750 7767 7767 7767 7791 7791 7791 7529 7529 7529 7529 7529 7470 7434 7434 7434 7416 7224 7180 7152 7196 7196 7196 7235 7219 7219 7219 7089 7090 7115 7115 7115 7115 7148 7148 7148 7148 7148 7148 7115 7115 7241 6977 6977 6977 6977 6977 6951 7093 7010 6974 6974 6974 6990 7020 6994 6994 6994 6994 6994 6994 6994 6994 6973 6973 6979 6979 6897 6897 6897 6897 6897 6897 6897 6897 6897 6907 6907 6907 6907 6907 6916 6904 6899 6899 6917 6917 7112 7002 7002 7002 6984 7015 7018 7010 7010 7061 7061 7061 7029 7029 7029 7021 7021 7021 6985 7201 7189 7189 7189 6837 6837 6799 6799 6799 6799 6796 6796 6796 6761 6673 6673 6673 6751 6636 6636 6636 6653 6653 6693 6737 7111 7111 7060 7060 7060 7060 7060 7060 7142 7142 7142 7142 7142 7142 7123 7358 7366 7366 7352 7366 7366 7366 7366 7366 7366 7366 7366 7353 7243 7166 7166 6957 6957 6957 6957 7075 7017 7017 7017 7017 7017 7017 7017 6963 6976 6976 6953 6953 6908 6957 6957 6981 6981 6981 6981 6981 6981 6981 6981 6981 7141 7141 7141 7116 7116 7107 7107 7107 7107 7254 7268 7343 7428 7239 7233 7233 7233 7233 7233 7194 7194 7194 7194 7194 7171 7190 7350 7366 7366 7366 7332 7332 7419 7419 7419 7419 7419 7419 7383 7383 7493 7476 7546 7429 7429 7479 7479 7479 7310 7310 7310 7310 7310 7310 7341 7341 7341 7341 7341 7341 7341 7341 7339 7339 7339 7339 7339 7345 7345 7345 7345 7345 7352 7352 7352 7398 7354 7354 7354 7354 7354 7354 7354 7354 7369 7369 7369 7369 7369 7308 7308 7308 7137 7123 7123 7101 7101 7062 7062 7062 7062 7062 7062 7062 7062 7062 7062 7062 7079 7079 7079 7079 7079 7130 7185 7185 7185 7219 7219 7219 7219 7219 7219 7219 7219 7168 7168 7168 7168 7151 7151 7154 7154 7148 7026 7008 7008 7008 7092 7115 7040 7040 7040 7040 6949 6936 6936 6936 6967 6967 6967 7027 7075 7075 7075 7075 7015 7015 7015 7019 7143 7143 7112 7112 7112 7112 7131 7131 7131 7175 7175 7009 7009 7009 7009 7009 7009 7009 7009 7030 7056 7043 7043 6826 6937 7017 7017 7017 7017 7016 7016 7016 6973 6952 6952 6931 6931 6931 6929 6929 6929 6929 6919 6934 6969 6969 6969 7078 7199 7199 7199 7165 7165 7165 7165 7172 7195 7169 7255 7280 7280 7280 7280 7280 7280 7348 7277 7232 7232 7232 7232 7232 7164 7164 7297 7313 7313 7313 7440 7440 7402 7269 7269 7269 7253 7253 7253 7253 7344 7308 7308 7308 7308 7328 7328 7328 7328 7306 7306 7306 7306 7303 7381 7381 7381 7381 7381 7381 7381 7381 7381 7381 7435 7435 7449 7470 7470 7471 7498 7498 7448 7448 7466 7466 7466 7465 7471 7471 7471 7471 7471 7471 7448 7448 7448 7448 7471 7471 7471 7434 7444 7444 7444 7444 7444 7343 7343 7341 7341 7341 7341 7341 7379 7373 7354 7672 7672 7536 7536 7476 7477 7465 7332 7332 7332 7332 7275 7275 7275 7287 7209 7209 7209 7209 7268 7268 7268 7296 7244 7244 7244 7214 7277 7277 7235 7227 7227 7227 7398 7398 7398 7431 7431 7431 7431 7387 7316 7316 7316 7324 7324 7324 7369 7369 7369 7333 7343 7343 7343 7343 7343 7343 7343 7343 7343 7343 7343 7367 7173 7173 7173 7077 7032 7146 7146 7146 7146 7146 7146 7158 7158 7158 7158 7158 7158 7122 7129 7129 7129 7081 7187 7187 7055 7055 7066 7066 7124 7162 7162 7162 7162 7121 7156 7150 7163 7163 7163 7163 7163 7109 7109 7109 7109 7109 7109 7109 7109 7157 7116 7116 7115 7115 7115 7110 7098 7098 7083 7114 7114 7066 7066 7142 7142 7142 7142 7142 7142 7142 7142 7142 7142 7142 7142 7142 7142 7279 7292 7292 7292 7292 7292 7252 7252 7227 7227 7227 7286 7286 7286 7286 7286 7297 7297 7297 7279 7091 7134 7134 7115 7117 7117 7117 7117 7106 7106 7112 7112 7112 7112 7131 7131 7131 7131 7137 7137 7137 7137 7085 7085 7085 7085 7085 7085 7085 7085 7126 7126 7126 7126 7126 7126 7126 7105 7105 7105 7105 7050 7120 7120 7054 7054 7054 6949 6949 6995 6995 6863 6863 6821 6821 6821 6871 6871 6961 6831 6831 6725 6725 6752 6752 6752 6744 6564 6795 6804 6850 6727 6711 6711 6711 6688 6688 6622 6653 6653 6653 6653 6653 6653 6653 6653 6653 6653 6705 6705 6705 6528 6486 6643 6643 6643 6643 6643 6643 6643 6415 6416 6413 6413 6549 6549 6543 6607 6607 6649 6649 6649 6649 6603 6603 6603 6529 6529 6529 6529 6529 6511 6310 6310 6310 6310 6310 6326 6326 6326 6326 6260 6232 6232 6232 6232 6173 6173 6173 6173 6173 6173 6173 6173 6213 6213 6213 6213 6216 6245 6360 6363 6449 6449 6426 6439 6439 6439 6289 6332 6334 6334 6308 6308 6308 6310 6310 6346 6375 6375 6375 6372 6358 6426 6426 6426 6426 6426 6468 6468 6468 6457 6457 6560 6560 6521 6521 6521 6521 6521 6521 6563 6563 6559 6522 6522 6572 6572 6534 6589 6589 6589 6589 6555 6511 6528 6528 6528 6573 6573 6573 6556 6556 6479 6479 6414 6423 6423 6449 6449 6449 6463 6463 6463 6463 6447 6447 6447 6447 6447 6447 6270 6270 6270 6270 6270 6301 6310 6310 6310 6310 6310 6360 6360 6412 6412 6412 6412 6412 6455 6455 6437 6512 6512 6512 6512 6512 6512 6468 6468 6468 6468 6468 6468 6397 6397 6415 6415 6415 6437 6437 6362 6362 6362 6362 6362 6362 6362 6362 6362 6362 6276 6298 6298 6342 6365 6365 6286 6286 6299 6305 6305 6400 6400 6400 6400 6400 6400 6384 6384 6254 6254 6254 6254 6186 6186 6186 6186 6186 6186 6186 6186 6251 6251 6251 6251 6251 6258 6258 6156 6181 6181 6181 6181 6225 6225 6225 6094 6061 6061 6049 6034 6034 6034 6034 6034 6034 6015 6005 5974 5974 5974 5974 5974 5974 5974 5974 5975 5985 5896 5896 5896 5896 5896 5925 5925 5925 5870 5870 5870 5870 5870 5870 5870 5870 5870 5927 5927 5927 6027 6049 6049 6089 6089 6089 6130 6130 6130 6130 6139 6139 6130 6121 6121 6164 6164 6164 6151 6151 6151 6151 6151 6151 6151 6149 6149 6149 6096 6090 6090 6090 6090 6090 6090 6090 6090 6090 6090 6090 6090 6128 6128 6128 6128 6128 6128 6128 6128 6076 6055 6055 6055 6055 6055 6055 6055 6055 6070 6070 6097 6097 6097 6097 6097 6070 6070 6082 6091 6028 6028 6028 6028 6028 6028 6028 6006 6006 5998 5998 5965 5920 5920 5920 5920 5916 5916 5868 5868 5868 5986 5964 5964 5964 5964 5942 5942 5942 5942 5965 5965 5965 5997 5997 5997 5997 5997 5997 5997 5997 5997 5995 5995 5995 5995 6025 6025 6026 6026 6026 6026 6026 6026 6029 6017 6017 6017 5837 5837 5837 5828 5828 5828 5828 5828 5828 5816 5816 5816 5816 5898 6007 6007 6007 5948 5967 5967 5967 6009 6009 6009 6002 6002 6002 5933 5957 5957 5957 5957 5957 5986 6053 6053 6053 6053 6053 6053 6033 6007 6007 6007 6007 6007 6035 6035 6035 6168 6168 6168 6168 6074 6074 6074 6074 6074 5947 5947 5939 5910 5910 6018 5961 5950 5950 6017 6017 6017 6017 6017 6175 6175 6172 6172 6172 6172 6172 6172 6172 6172 6172 6056 6056 6056 6053 6053 6053 6053 5975 5975 5975 6045 6045 6045 6045 6068 6053 6054 6041 6037 6068 6068 6068 6068 6068 6068 6068 6068 6068 6078 6078 6078 6078 6257 6257 6285 6285 6285 6241 6241 6303 6303 6303 6303 6289 6310 6310 6310 6310 6310 6310 6341 6341 6341 6341 6341 6354 6354 6354 6354 6354 6354 6354 6354 6345 6345 6324 6324 6389 6389 6389 6424 6415 6286 6540 6540 6540 6540 6540 6487 6487 6487 6487 6487 6556 6556 6556 6545 6545 6477 6477 6477 6437 6437 6446 6446 6446 6446 6446 6446 6446 6446 6446 6446 6446 6446 6380 6380 6380 6380 6380 6327 6270 6270 6270 6270 6270 6270 6362 6362 6362 6362 6393 6393 6393 6393 6393 6393 6393 6333 5992 5959 5959 5959 6000 6000 6084 6097 6097 6097 6097 6104 6104 6104 6088 6104 6159 6097 6097 6097 6097 6097 6211 6211 6211 6211 6211 6211 6211 6211 6211 6211 6211 6211 6291 6291 6291 6336 6398 6398 6398 6398 6398 6398 6398 6398 6398 6398 6398 6398 6398 6430 6330 6332 6332 6332 6332 6332 6332 6332 6332 6256 6256 6256 6256 6256 6256 6256 6127 6126 6126 6126 6126 6126 6124 6124 6124 6124 6124 6124 6124 6124 6124 6124 6124 6124 6124 6144 6144 6144 6146 6174 6138 6138 6101 6101 6101 6127 6127 6127 6127 6127 6127 6128 6137 6137 6117 6117 6117 6117 6117 6117 6142 6042 6042 6062 6057 6057 6066 6066 6066 6066 6066 5957 5957 5957 5957 5940 5940 6028 6020 6020 6020 5876 5876 5870 5870 5870 5870 5870 5870 5870 5910 5920 5920 5872 5872 5872 5775 5827 5858 5858 5858 5858 5858 5858 5858 5858 5858 5858 5858 5858 5858 5858 5840 5840 5840 5788 5788 5775 5775 5775 5775 5775 5775 5652 5652 5652 5652 5652 5626 5626 5626 5626 5626 5626 5626 5626 5626 5626 5625 5639 5639 5639 5639 5692 5501 5527 5527 5527 5238 5238 5238 5238 5238 5238 5238 5238 5238 5238 5200 5200 5271 5316 5316 5316 5316 5316 5316 5316 5316 5316 5316 5316 5316 5316 5276 5276 5276 5276 5276 5276 5276 5276 5276 5276 5276 5276 5276 5336 5336 5336 5336 5336 5322 5322 5359 5359 5359 5359 5359 5359 5359 5359 5359 5341 5394 5394 5390 5390 5380 5380 5380 5380 5380 5380 5380 5380 5380 5447 5454 5454 5454 5405 5405 5405 5405 5419 5419 5419 5419 5373 5373 5373 5373 5373 5373 5373 5373 5332 5332 5332 5332 5332 5332 5292 5292 5292 5292 5292 5297 5297 5297 5297 5297 5297 5297 5297 5322 5322 5322 5356 5356 5348 5348 5355 5469 5469 5469 5492 5492 5492 5492 5492 5492 5492 5435 5435 5435 5386 5386 5410 5387 5393 5393 5393 5400 5400 5400 5402 5378 5396 5396 5377 5282 5282 5282 5282 5282 5282 5282 5282 5282 5329 5351 5351 5351 5351 5351 5351 5351 5385 5385 5385 5385 5385 5385 5385 5385 5385 5336 5336 5483 5483 5503 5503 5503 5503 5503 5503 5460 5460 5460 5460 5460 5460 5460 5460 5460 5460 5320 5320 5324 5324 5324 5324 5324 5324 5324 5324 5324 5315 5315 5315 5313 5314 5314 5314 5314 5314 5314 5314 5314 5314 5314 5314 5337 5337 5337 5337 5337 5337 5337 5310 5289 5289 5289 5289 5289 5280 5332 5330 5330 5330 5330 5330 5314 5314 5314 5314 5314 5314 5318 5318 5341 5341 5341 5341 5341 5341 5336 5336 5336 5336 5336 5336 5336 5331 5331 5339 5339 5339 5339 5339 5337 5249 5249 5249 5249 5249 5249 5249 5249 5249 5249 5289 5162 5168 5168 5168 5198 5198 5198 5198 5198 5198 5187 5187 5187 5216 5216 5212 5212 5212 5212 5212 5212 5212 5212 5212 5212 5212 5212 5264 5264 5273 5273 5273 5273 5273 5273 5305 5305 5305 5305 5305 5281 5252 5252 5233 5233 5233 5233 5233 5233 5233 5206 5206 5206 5206 5206 5206 5206 5206 5176 5176 5176 5176 5161 5161 5161 5161 5161 5161 5161 5114 5114 5114 5114 5114 5114 5114 5112 5113 5113 5113 5085 5085 5085 5085 5085 5082 5082 5082 5082 5082 5082 5039 5039 5030 5030 5040 5040 5040 5040 5038 5038 5038 5038 5038 5038 5038 5038 5038 5038 5038 5038 5038 5038 5037 5039 5044 5044 5045 5045 5044 5044 5044 4992 4992 4992 4992 4992 5004 5004 5004 5004 5004 4914 4914 4914 4914 4914 4914 4914 4914 4914 4914 4914 4914 4914 4914 4914 4914 4914 4914 4914 4914 4906 4906 4906 4906 4906 4906 4906 4906 4906 4906 4906 4867 4867 4822 4824 4824 4812 4812 4812 4812 4812 4812 4812 4812 4812 4812 4812 4812 4812 4812 4808 4808 4808 4808 4808 4808 4808 4808 4808 4808 4808 4808 4808 4808 4808 4808 4799 4799 4799 4799 4799 4799 4799 4799 4799 4799 4799 4799 4799 4799 4880 4880 4880 4880 4880 4880 4880 4880 4880 4880 4880 4892 4892 4892 4892 4892 4892 4892 4892 4850 4850 4850 4868 4868 4868 4868 4836 4816 4807 4807 4840 4840 4840 4840 4840 4840 4840 4840 4840 4840 4840 4840 4855 4855 4855 4855 4855 4855 4790 4790 4790 4790 4790 4790 4790 4790 4790 4797 4797 4797 4797 4744 4756 4756 4753 4753 4753 4753 4753 4753 4753 4753 4753 4753 4753 4753 4753 4753 4753 4780 4780 4780 4780 4780 4780 4780 4780 4763 4763 4763 4763 4772 4772 4772 4772 4772 4772 4772 4772 4772 4772 4772 4772 4708 4708 4708 4708 4708 4679 4679 4679 4679 4679 4715 4715 4715 4726 4726 4777 4777 4777 4821 4821 4821 4821 4821 4821 4770 4770 4770 4770 4770 4782 4782 4782 4782 4782 4782 4782 4782 4782 4782 4782 4782 4782 4780 4780 4780 4780 4787 4787 4775 4775 4775 4729 4729 4729 4729 4729 4712 4712 4712 4712 4712 4712 4712 4712 4712 4712 4712 4712 4712 4712 4712 4712 4712 4712 4748 4748 4748 4748 4749 4749 4749 4749 4749 4749 4749 4749 4735 4729 4729 4729 4729 4729 4729 4729 4729 4729 4729 4729 4694 4643 4623 4623 4623 4623 4623 4623 4623 4623 4623 4623 4666 4666 4666 4666 4666 4666 4666 4666 4666 4666 4666 4666 4666 4666 4666 4666 4608 4621 4621 4621 4621 4636 4636 4593 4593 4593 4593 4593 4593 4593 4575 4552 4552 4552 4552 4552 4552 4552 4552 4552 4552 4552 4552 4552 4552 4552 4552 4552 4552 4552 4573 4573 4573 4573 4529 4529 4529 4529 4529 4529 4529 4529 4554 4554 4561 4561 4561 4506 4506 4506 4506 4506 4506 4506 4506 4506 4526 4526 4526 4526 4526 4526 4526 4526 4526 4526 4526 4526 4549 4549 4549 4562 4562 4562 4596 4613 4613 4613 4613 4613 4613 4613 4709 4709 4709 4709 4709 4709 4709 4709 4709 4709 4608 4608 4608 4608 4608 4608 4641 4614 4614 4614 4614 4596 4596 4597 4594 4594 4594 4594 4594 4594 4594 4602 4601 4601 4608 4584 4584 4584 4576 4576 4576 4576 4563 4563 4563 4563 4563 4563 4563 4563 4563 4565 4565 4565 4565 4565 4565 4565 4565 4556 4556 4556 4556 4556 4556 4556 4556 4534 4534 4577 4570 4572 4572 4572 4572 4572 4572 4572 4572 4572 4572 4572 4572 4572 4572 4572 4572 4572 4572 4572 4572 4572 4572 4572 4572 4572 4572 4572 4572 4572 4572 4572 4572 4563 4531 4531 4531 4531 4540 4540 4538 4538 4538 4538 4522 4522 4522 4522 4522 4522 4526 4526 4526 4633 4633 4518 4490 4490 4490 4490 4490 4463 4463 4463 4463 4463 4463 4463 4463 4463 4463 4463 4463 4463 4463 4463 4516 4516 4500 4500 4500 4500 4500 4500 4500 4500 4500 4500 4500 4500 4449 4449 4449 4449 4431 4431 4431 4431 4431 4431 4431 4431 4431 4431 4431 4431 4444 4444 4444 4444 4444 4444 4444 4444 4444 4444 4444 4444 4444 4444 4444 4444 4444 4452 4422 4422 4422 4422 4422 4422 4422 4437 4437 4442 4420 4420 4420 4420 4420 4420 4420 4420 4420 4420 4412 4412 4412 4412 4432 4432 4432 4432 4432 4432 4432 4432 4432 4432 4432 4432 4432 4432 4432 4432 4462 4462 4462 4462 4462 4462 4462 4462 4462 4462 4462 4462 4442 4442 4412 4412 4412 4412 4412 4412 4412 4412 4412 4412 4412 4412 4412 4412 4412 4412 4412 4412 4412 4412 4412 4412 4412 4412 4368 4368 4368 4368 4368 4368 4368 4368 4368 4363 4363 4363 4363 4363 4363 4363 4363 4355 4355 4355 4340 4340 4340 4376 4376 4376 4376 4376 4376 4376 4376 4376 4376 4377 4377 4377 4377 4377 4377 4377 4377 4377 4377 4357 4357 4357 4357 4357 4357 4357 4357 4357 4357 4357 4357 4357 4357 4357 4357 4357 4357 4357 4357 4357 4357 4357 4357 4357 4357 4357 4357 4335 4335 4335 4335 4335 4351 4341 4311 4311 4311 4311 4312 4312 4312 4312 4312 4312 4312 4312 4312 4312 4312 4312 4316 4316 4316 4316 4330 4330 4314 4314 4314 4314 4312 4312 4312 4312 4328 4328 4328 4328 4328 4328 4328 4323 4323 4323 4323 4323 4323 4323 4323 4323 4323 4323 4323 4323 4312 4312 4312 4312 4312 4312 4327 4327 4327 4327 4327 4327 4324 4311 4311 4311 4311 4311 4311 4311 4311 4311 4311 4311 4311 4311 4311 4311 4311 4311 4311 4311 4311 4311 4311 4311 4311 4311 4288 4288 4288 4288 4288 4288 4288 4181 4181 4181 4181 4181 4181 4181 4181 4181 4181 4185 4185 4185 4185 4185 4185 4185 4185 4185 4185 4143 4143 4143 4143 4143 4143 4143 4143 4143 4143 4143 4143 4143 4143 4136 4155 4155 4155 4155 4155 4156 4156 4156 4156 4156 4156 4156 4143 4143 4143 4143 4143 4143 4143 4143 4143 4143 4143 4143 4143 4143 4143 4143 4143 4143 4143 4143 4156 4156 4156 4156 4156 4156 4156 4156 4145 4145 4145 4145 4145 4145 4145 4145 4145 4145 4145 4145 4145 4145 4145 4145 4145 4145 4145 4145 4145 4145 4145 4145 4146 4146 4146 4146 4146 4146 4146 4146 4146 4146 4146 4146 4146 4146 4146 4146 4146 4146 4146 4146 4146 4146 4135 4135 4135 4135 4135 4135 4135 4135 4135 4135 4135 4135 4135 4135 4135 4135 4135 4135 4135 4135 4135 4135 4135 4135 4135 4135 4135 4135 4135 4135 4124 4124 4124 4124 4124 4124 4124 4124 4124 4124 4124 4124 4124 4124 4124 4124 4124 4124 4124 4124 4086 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4045 4062 4062 4062 4062 4062 4062 4062 4062 4062 4062 4062 4062 4064 4064 4064 4064 4064 4064 4064 4064 4064 4064 4064 4064 4064 4044 4044 4044 4044 4044 4044 4044 4044 4044 4044 4044 4044 4044 4044 4044 4044 4044 4044 4044 4044 4044 4044 4044 4044 4044 4044 4044 4044 4044 4044 4044 4044 4044 4044 4044 4002 4002 4002 4002 4002 4002 4002 4002 4002 4002 4002 3996 3996 3996 3996 3996 3996 3996 3996 3948 3948 3948 3948 3948 3948 3948 3948 3948 3948 3948 3948 3940 3940 3940 3940 3940 3940 3940 3940 3940 3940 3940 3940 3940 3940 3940 3940 3940 3932 3932 3932 3932 3932 3932 3932 3932 3932 3932 3932 3932 3932 3932 3932 3932 3932 3932 3932 3932 3932 3927 3927 3927 3926 3926 3926 3926 3926 3926 3924 3924 3924 3924 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3929 3913 3913 3913 3913 3913 3913 3913 3913 3913 3913 3913 3913 3913 3908 3908 3908 3908 3908 3908 3908 3908 3908 3908 3908 3908 3908 3908 3908 3908 3908 3908 3908 3908 3908 3908 3908 3908 3908 3908 3908 3908 3908 3908 3908 3908 3908 3908 3908 3908 3908 3908 3870 3870 3870 3870 3870 3870 3870 3870 3870 3851 3851 3851 3851 3851 3851 3851 3851 3851 3851 3851 3851 3851 3851 3840 3840 3840 3840 3840 3840 3840 3840 3840 3840 3840 3840 3840 3840 3840 3865 3865 3865 3865 3865 3865 3865 3865 3865 3865 3865 3865 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3854 3822 3822 3822 3822 3821 3821 3821 3821 3821 3821 3821 3809 3809 3809 3809 3809 3809 3809 3809 3809 3809 3809 3809 3809 3809 3809 3809 3809 3809 3809 3809 3809 3809 3809 3809 3809 3809 3809 3809 3809 3809 3809 3809 3809 3809 3809 3809 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3803 3799 3799 3799 3799 3799 3799 3799 3799 3799 3799 3799 3799 3799 3799 3799 3799 3799 3799 3799 3799 3799 3799 3799 3799 3799 3799 3799 3799 3799 3799 3799 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3787 3785 3785 3785 3785 3785 3785 3785 3785 3785 3785 3785 3779 3779 3779 3779 3779 3779 3779 3779 3779 3779 3779 3779 3779 3779 3779 3779 3779 3779 3768 3768 3768 3768 3768 3768 3768 3768 3768 3768 3752 3752 3752 3752 3752 3752 3752 3752 3752 3752 3752 3752 3752 3752 3752 3752 3752 3752 3752 3752 3752 3752 3752 3752 3752 3752 3752 3752 3752 3743 3743 3743 3743 3743 3743 3743 3743 3724 3724 3724 3724 3724 3724 3724 3724 3724 3724 3724 3724 3724 3724 3724 3724 3724 3724 3724 3724 3724 3724 3724 3724 3716 3716 3716 3716 3716 3716 3716 3716 3716 3716 3716 3711 3711 3727 3727 3727 3727 3727 3727 3727 3727 3727 3727 3727 3728 3728 3728 3728 3728 3728 3728 3728 3728 3728 3728 3728 3728 3728 3728 3728 3728 3728 3728 3728 3728 3728 3728 3728 3728 3728 3728 3728 3728 3728 3728 3728 3724 3724 3724 3724 3724 3724 3724 3724 3724 3724 3724 3724 3724 3724 3724 3718 3718 3718 3726 3726 3726 3726 3706 3706 3706 3706 3706 3706 3706 3706 3706 3706 3706 3706 3706 3711 3711 3711 3711 3711 3711 3711 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3700 3686 3693 3693 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3689 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3681 3675 3675 3675 3675 3675 3675 3675 3675 3675 3675 3675 3669 3669 3669 3669 3669 3669 3669 3669 3669 3669 3669 3669 3669 3669 3669 3669 3669 3669 3669 3669 3669 3669 3669 3652 3652 3652 3652 3652 3652 3652 3652 3652 3652 3652 3652 3652 3652 3652 3652 3652 3652 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3634 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3623 3623 3623 3623 3623 3623 3623 3623 3623 3623 3623 3623 3623 3623 3623 3623 3623 3623 3623 3623 3623 3623 3623 3623 3623 3623 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3621 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3614 3612 3612 3612 3612 3592 3592 3592 3592 3592 3592 3582 3582 3582 3582 3582 3582 3582 3582 3582 3582 3582 3582 3583 3583 3583 3583 3583 3583 3583 3583 3583 3583 3583 3583 3583 3583 3583 3574 3574 3574 3574 3574 3574 3574 3574 3574 3574 3574 3574 3574 3574 3574 3574 3574 3574 3574 3574 3574 3574 3574 3574 3574 3574 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3572 3571 3571 3571 3571 3571 3571 3571 3571 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3570 3561 3561 3561 3561 3561 3561 3541 3541 3541 3541 3541 3541 3541 3541 3541 3541 3541 3541 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3525 3519 3519 3519 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3513 3513 3513 3513 3513 3513 3513 3513 3513 3513 3513 3513 3513 3513 3513 3513 3513 3513 3513 3513 3513 3513 3513 3513 3513 3517 3517 3517 3517 3517 3517 3517 3517 3517 3517 3517 3517 3517 3517 3517 3517 3517 3517 3517 3517 3517 3517 3513 3513 3513 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3512 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3505 3504 3504 3504 3504 3504 3504 3504 3504 3504 3504 3504 3504 3504 3504 3504 3504 3504 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3508 3497 3497 3497 3497 3497 3497 3497 3497 3497 3497 3497 3497 3497 3497 3497 3497 3497 3497 3497 3497 3497 3497 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3491 3487 3487 3487 3487 3487 3487 3487 3487 3487 3487 3487 3487 3487 3487 3487 3487 3487 3487 3487 3487 3487 3487 3487 3487 3487 3487 3487 3487 3487 3487 3487 3487 3487 3487 3487 3487 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3475 3474 3474 3474 3474 3474 3474 3474 3439 3439 3439 3439 3439 3439 3439 3439 3439 3439 3439 3439 3439 3439 3439 3439 3439 3439 3439 3439 3439 3439 3439 3439 3439 3439 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3438 3391 3391 3391 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3392 3388 3388 3388 3388 3388 3388 3388 3388 3388 3388 3388 3388 3388 3388 3388 3388 3388 3388 3388 3388 3388 3388 3388 3388 3388 3388 3388 3388 3388 3388 3388 3388 3388 3388 3388 3380 3380 3380 3380 3380 3380 3380 3380 3380 3380 3380 3380 3380 3380 3380 3380 3380 3380 3380 3380 3380 3380 3380 3380 3380 3380 3380 3380 3380 3380 3380 3380 3380 3380 3380 3380 3380 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3377 3350 3350 3350 3350 3350 3350 3350 3350 3350 3350 3350 3350 3350 3350 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3345 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3337 3335 3335 3335 3335 3335 3335 3335 3335 3335 3335 3335 3335 3335 3335 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3329 3326 3326 3326 3326 3326 3326 3326 3326 3326 3326 3326 3326 3326 3326 3326 3326 3326 3326 3326 3326 3326 3326 3321 3321 3321 3321 3321 3321 3321 3321 3321 3321 3321 3321 3321 3321 3321 3321 3321 3321 3321 3321 3321 3321 3321 3321 3321 3321 3321 3321 3295 3295 3295 3295 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3293 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3277 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3273 3262 3262 3262 3262 3262 3262 3262 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3253 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3237 3228 3228 3228 3228 3228 3228 3228 3228 3228 3228 3228 3228 3228 3228 3228 3228 3228 3228 3228 3228 3228 3228 3228 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3224 3219 3219 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3211 3163 3163 3163 3163 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3157 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3152 3146 3146 3146 3146 3146 3146 3146 3146 3146 3146 3146 3146 3146 3146 3146 3146 3146 3146 3146 3146 3146 3146 3146 3146 3146 3146 3146 3146 3146 3146 3146 3146 3146 3146 3146 3146 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3125 3124 3124 3124 3124 3124 3124 3124 3124 3124 3124 3124 3124 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3110 3110 3110 3110 3110 3110 3110 3110 3110 3110 3110 3110 3110 3110 3110 3110 3110 3110 3110 3110 3110 3110 3110 3110 3110 3110 3110 3110 3110 3110 3110 3110 3110 3110 3110 3110 3109 3109 3109 3109 3109 3109 3109 3109 3109 3109 3109 3109 3109 3109 3109 3109 3109 3109 3109 3109 3109 3109 3109 3109 3109 3109 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3102 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3099 3095 3095 3095 3095 3095 3095 3095 3095 3095 3095 3095 3095 3095 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3090 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3077 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3074 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3072 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3052 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3048 3034 3034 3034 3034 3034 3034 3034 3034 3034 3034 3034 3018 3018 3018 3018 3018 3018 3018 3018 3018 3018 3018 3018 3018 3018 3018 3018 3018 3018 3018 3018 3018 3018 3018 3018 3018 3018 3018 3018 3018 3018 3018 2962 2962 2962 2962 2962 2962 2962 2962 2962 2962 2962 2962 2962 2962 2962 2962 2962 2962 2962 2962 2962 2962 2962 2962 2962 2962 2943 2943 2943 2943 2943 2943 2943 2943 2943 2943 2943 2943 2943 2943 2943 2943 2943 2943 2943 2943 2943 2933 2933 2933 2933 2933 2933 2933 2933 2933 2933 2933 2933 2933 2933 2933 2933 2933 2933 2933 2933 2933 2933 2933 2933 2933 2933 2933 2933 2933 2933 2933 2933 2933 2933 2933 2920 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2907 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2896 2876 2876 2876 2876 2876 2876 2876 2876 2876 2876 2876 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2855 2846 2846 2846 2846 2846 2846 2846 2846 2846 2846 2846 2846 2846 2846 2846 2846 2846 2846 2846 2846 2846 2846 2846 2846 2846 2846 2846 2846 2846 2846 2846 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2844 2842 2842 2842 2842 2842 2842 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2831 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2813 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2786 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2774 2772 2772 2772 2772 2772 2772 2772 2772 2772 2772 2772 2772 2772 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2762 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2760 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2738 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2722 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2720 2708 2708 2708 2708 2708 2708 2708 2708 2708 2708 2708 2708 2708 2708 2708 2703 2703 2703 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2701 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2686 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2685 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2684 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2676 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2674 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2668 2665 2665 2665 2665 2665 2665 2665 2665 2665 2665 2665 2665 2665 2665 2665 2665 2665 2665 2665 2665 2665 2665 2665 2665 2665 2665 2665 2665 2665 2665 2665 2665 2665 2665 2665 2665 2665 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 2659 \ No newline at end of file diff --git a/pfsp_simulated_annealing/draw.py b/pfsp_simulated_annealing/draw.py new file mode 100644 index 0000000..82e0bbc --- /dev/null +++ b/pfsp_simulated_annealing/draw.py @@ -0,0 +1,92 @@ +import numpy as np +import matplotlib.pyplot as plt + +# 设置中文字体 +plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签 +plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号 + +mylist = [] # 记录时间安排,两个一组表示开头结尾 +labels = [] # 记录调度方案,用于产生不同的颜色 + +# 改进颜色生成函数 +def get_color(m_str): + "对于不同的工件产生不同的RGB颜色" + num = int(m_str) + # 使用 matplotlib 的 colormap 生成更均匀的颜色 + from matplotlib.cm import get_cmap + cmap = get_cmap('tab20') # 选择一个 colormap,例如 'tab20' + return cmap(num % 20) # 确保 num 在 colormap 的范围内 + +try: + inputfile = open("output/time.txt", 'r', encoding='utf-8') + while True: + templine = inputfile.readline() + if templine == '': + break + templine = templine.strip('\t\n') + templist = templine.split('\t') + templist1 = [] + for item in templist: + templist1.append(int(item)) + mylist.append(templist1) + inputfile.close() +except FileNotFoundError: + print("Error: 文件 time.txt 不存在") + exit() + +try: + inputfile = open("output/management.txt", 'r', encoding='utf-8') + while True: + templine = inputfile.readline() + if templine == '': + break + templine = templine.strip('\t\n') + templist = templine.split('\t') + labels.append(templist) + inputfile.close() +except FileNotFoundError: + print("Error: 文件 management.txt 不存在") + exit() + +y = np.array(mylist) +for i in range(len(mylist)): + for j in range(int(len(mylist[i])/2)): + left = y[i][2 * j] + width = y[i][2 * j + 1] - left + if width > 0: # 确保宽度为正值 + plt.barh(i + 1, width, left=left, color=get_color(labels[i][j])) + +plt.xlabel("time") +plt.ylabel("machine") +plt.title("甘特图") # 设置甘特图的标题 + +# 添加图例 +unique_labels = list(set([item for sublist in labels for item in sublist])) +colors = [get_color(label) for label in unique_labels] +plt.legend(handles=[plt.Rectangle((0, 0), 1, 1, color=get_color(label)) for label in unique_labels], labels=unique_labels) + +plt.show() + +mylist = [] +try: + inputfile = open("data/trace.txt", 'r', encoding='utf-8') + while True: + templine = inputfile.readline() + if templine == '': + break + templine = templine.strip('\t\n') + templist = templine.split('\t') + for item in templist: + mylist.append(int(item)) + inputfile.close() +except FileNotFoundError: + print("Error: 文件 trace.txt 不存在") + exit() + +plt.plot(mylist, linewidth=1) +plt.title("目标函数变化图", fontsize=20) +plt.xlabel("x", fontsize=10) +plt.ylabel("f", fontsize=14) +plt.tick_params(axis='both', labelsize=10) + +plt.show() \ No newline at end of file diff --git a/pfsp_simulated_annealing/machine.py b/pfsp_simulated_annealing/machine.py new file mode 100644 index 0000000..034e288 --- /dev/null +++ b/pfsp_simulated_annealing/machine.py @@ -0,0 +1,27 @@ +class Machine: + def __init__(self): + self.processing = -1 # 当前正在处理的工件索引 ,-1代表空闲 比如索引是12,调度顺序中12位置上的值比如是7,那就意味着第13个加工的工件是7号工件 + self.left_time = 0 # 剩余加工时间 0时,表示该工件在该机器上的处理已完成。 + + def left_time(self): + """获取当前剩余处理时间""" + return self.left_time + + def process(self): + """获取当前正在处理的工件索引""" + return self.processing + + def next_time(self): + """减少剩余处理时间(模拟时间流逝)""" + if self.left_time > 0: + self.left_time -= 1 + + def next_wp(self, time): + """切换到下一个工件并设置处理时间""" + self.processing += 1 + self.left_time = time + + def reset(self): + """重置机器状态""" + self.processing = -1 + self.left_time = 0 \ No newline at end of file diff --git a/pfsp_simulated_annealing/output/management.txt b/pfsp_simulated_annealing/output/management.txt new file mode 100644 index 0000000..9ba9577 --- /dev/null +++ b/pfsp_simulated_annealing/output/management.txt @@ -0,0 +1,10 @@ +13 16 9 11 14 19 1 15 8 6 3 12 18 2 4 5 10 17 0 7 +13 9 16 14 11 8 15 12 1 3 2 4 18 19 10 6 17 5 0 7 +9 16 14 11 8 13 3 15 1 2 12 4 6 10 17 0 5 7 19 18 +13 8 3 11 9 14 2 1 15 4 10 17 16 0 12 18 6 7 19 5 +3 8 9 15 11 2 10 0 13 17 16 4 14 18 6 19 12 7 1 5 +3 2 0 10 17 15 9 8 16 4 14 13 19 6 18 11 7 5 12 1 +0 2 17 15 16 9 10 19 6 14 13 4 3 11 8 5 18 12 1 7 +17 0 16 9 19 15 10 4 14 6 11 8 5 18 13 7 2 1 3 12 +17 9 0 15 4 10 19 14 8 5 6 18 11 7 13 2 16 3 1 12 +9 4 0 15 14 19 8 5 18 17 7 11 10 13 6 3 16 2 1 12 \ No newline at end of file diff --git a/pfsp_simulated_annealing/output/time.txt b/pfsp_simulated_annealing/output/time.txt new file mode 100644 index 0000000..3ce5599 --- /dev/null +++ b/pfsp_simulated_annealing/output/time.txt @@ -0,0 +1,10 @@ +0 27 27 86 86 138 138 193 193 227 227 286 286 311 311 326 326 365 365 414 414 455 455 463 463 483 483 559 559 624 624 705 705 777 777 870 870 966 966 1059 +27 38 138 184 184 239 239 325 325 368 368 451 451 456 463 554 554 598 598 604 604 666 666 757 757 848 848 861 861 865 865 874 874 878 878 947 966 1046 1059 1148 +184 248 248 291 325 412 412 459 459 514 514 608 608 611 611 650 650 660 666 714 714 795 795 870 874 886 886 915 915 958 1046 1102 1102 1167 1167 1198 1198 1291 1291 1364 +608 646 646 678 678 711 711 743 743 756 756 766 766 820 820 861 861 884 884 914 915 1009 1009 1014 1014 1063 1102 1150 1150 1243 1364 1405 1405 1459 1459 1473 1473 1499 1499 1592 +711 788 788 806 806 860 884 900 900 987 987 1034 1034 1119 1150 1164 1164 1197 1197 1281 1281 1304 1304 1351 1351 1415 1415 1515 1515 1590 1590 1601 1601 1615 1615 1652 1652 1716 1716 1777 +788 832 1034 1069 1164 1252 1252 1303 1303 1358 1358 1359 1359 1421 1421 1430 1430 1455 1455 1510 1510 1540 1540 1607 1607 1614 1614 1680 1680 1718 1718 1815 1815 1872 1872 1875 1875 1961 1961 2013 +1252 1302 1302 1374 1374 1396 1396 1453 1455 1506 1506 1551 1551 1580 1614 1680 1680 1714 1714 1761 1761 1769 1769 1820 1820 1863 1863 1904 1904 1997 1997 2041 2041 2116 2116 2180 2180 2199 2199 2232 +1396 1474 1474 1489 1506 1578 1578 1658 1680 1722 1722 1777 1777 1842 1842 1843 1843 1894 1894 1906 1906 1992 1997 2062 2062 2079 2116 2125 2125 2180 2232 2328 2328 2382 2382 2410 2410 2460 2460 2502 +1474 1505 1658 1677 1677 1744 1777 1839 1843 1879 1879 1929 1929 1983 1983 2052 2062 2137 2137 2143 2502 2534 2572 2648 2648 2665 2665 2697 2697 2796 2796 2823 2823 2832 2832 2851 2851 2923 2923 2993 +1677 1742 1879 1952 1952 2017 2017 2052 2052 2078 2078 2177 2177 2250 2250 2264 2648 2719 2719 2730 2730 2775 2775 2805 2805 2821 2821 2839 2955 2961 2961 3004 3004 3005 3005 3061 3061 3088 3088 3091 \ No newline at end of file diff --git a/pfsp_simulated_annealing/simulate.py b/pfsp_simulated_annealing/simulate.py new file mode 100644 index 0000000..5586de2 --- /dev/null +++ b/pfsp_simulated_annealing/simulate.py @@ -0,0 +1,163 @@ +import random +from turtledemo.paint import switchupdown + +from pfsp_simulated_annealing.machine import Machine +from pfsp_simulated_annealing.workpiece import Workpiece + + +class Simulate: + def __init__(self, n, m, p): + self.Wnum = n #声明一个整数变量Wnum,表示工件的数量。 + self.Mnum = m #声明一个整数变量Mnum,表示机器的数量。 + self.cost = [[0] * m for _ in range(n)] #声明一个二维整数数组cost,用于存储每个工件在每台机器上的加工时间。 + for i in range(n): + for j in range(m): + self.cost[i][j] = p[i * m + j] + + self.management = [[j for j in range(n)] for _ in range(m)] #声明一个二维整数数组management,用于存储工件的调度顺序。 + self.Time = [[0] * n for _ in range(m)] #声明一个二维整数数组Time,用于存储每台机器上每个工件的开始加工时间,也就是调度顺序。 + self.switchx = 0 #声明两个整数变量switchx和switchy,用于存储交换操作中的两个工件的索引。 + self.switchy = 0 + self.switchrow = 0 + self.M = [Machine() for _ in range(m)] #声明一个Machine对象数组M,用于存储每台机器的信息。 + self.W = [Workpiece() for _ in range(n)] #声明一个Workpiece对象数组W,用于存储每个工件的信息。 + print(f"Simulate初始化") + self.print_data() #打印出来看看有没有错误 + + def random_reset(self): #其实就是初始化工件在每个机器上的调度顺序 + "随机重置工件在每个机器上的调度顺序" + for i in range(self.Mnum): # 遍历每台机器 + for j in range(self.Wnum): # 遍历工件 + # 生成随机索引 + x = random.randint(j, self.Wnum - 1) + # 交换 + self.management[i][j], self.management[i][x] = self.management[i][x], self.management[i][j] + print("工件初始调度顺序 (management):") + for man in self.management: + print(man) + + def roll_back(self): + """交换管理矩阵中指定行的两个元素""" #根据保存的row,x,y,,把交换过的位置给交换回去 + # 保存当前行、列的值 + temp = self.management[self.switchrow][self.switchx] + # 交换元素 + self.management[self.switchrow][self.switchx] = self.management[self.switchrow][self.switchy] + self.management[self.switchrow][self.switchy] = temp + + def random_exchange(self): #找到下一个调度方案,并且每次只改变一台机器上的两个工件之间的调度顺序 + """随机交换两个工件在同一台机器的调度位置""" #同时还得记录是哪俩个交换了位置 + random.seed() # 用于初始化随机数生成器 + self.switchrow = random.randint(0, self.Mnum - 1) + self.switchx = random.randint(0, self.Wnum - 1) + self.switchy = random.randint(0, self.Wnum - 1) + #print(f"随机改变了第{self.switchrow}台机器,第{self.switchx}和{self.switchy}个工件之间的调度顺序") + # 交换工件位置 + self.management[self.switchrow][self.switchx], self.management[self.switchrow][self.switchy] = \ + self.management[self.switchrow][self.switchy], self.management[self.switchrow][self.switchx] + #print("随机交换后的管理信息:") + #for row in self.management: + # print(row) + + + def f(self): + #print("模拟一个车间调度系统中的调度过程,直到所有工件完成在所有机器上的处理") + rtime = 0 #记录总花费时间 + while True: + #判断是否有工件加工完毕并且可以转移到下一台机器上 + for i in range(self.Mnum): + current_piece = self.M[i].process() #获得当前这个机器正在处理的工件索引 + if current_piece != self.Wnum - 1: #如果当前工件的索引不等于最后一个也就是这次测试的工件的数量 + x = self.management[i][current_piece + 1] #得到这台机器下一个要处理的工件的号码 + if self.M[i].left_time == 0 and self.W[x].left_time == 0 and self.W[x].being_processed == i - 1: + #当前这台机器的剩余加工时间为0 并且 这台机器的下一个要加工的工件的剩余加工时间为0 + # 并且这台机器的下一个要加工的工件的现在停留在前一台机器上 + #也就是说,当前机器空闲了,当前机器的下一个要加工的工件它刚好在前一台机器,并且在前一台工具那也已经加工完了,那这台机器就可以开始加工这个工件了 + self.M[i].next_wp(self.cost[x][i]) #当前机器开始加工下一个工件,设置时间为下一个工件在那台机器上要耗费的时间 + self.W[x].next_machine(self.cost[x][i]) #这个工件转移到下一台机器加工 因为加工顺序必须是从0 1 2 3 4 这样一台台排下去的 + self.Time[i][current_piece + 1] = rtime #记录这台机器第几个工件的开始加工时间,因为current_price + + + #同时减少机器和工件的加工时间,每次都减1 + for i in range(self.Mnum): + self.M[i].next_time() + + for i in range(self.Wnum): + self.W[i].next_time() + + flag = False #判断是否全部加工完毕 + for i in range(self.Wnum): + if self.W[i].left_time != 0 or self.W[i].being_processed != self.Mnum - 1: + flag = True + break + + if not flag: + #print(f"此次调度方案耗时:{rtime}") + return rtime + 1 + rtime += 1 + + + + + def output_data(self): + # 构建 management_str 字符串 + management_str = [] + for i in range(self.Mnum): + row = [] + for j in range(self.Wnum): + row.append(str(self.management[i][j])) + management_str.append('\t'.join(row)) + management_str = '\n'.join(management_str) + + # 写入 management.txt 文件 + file_name = "output/management.txt" + try: + with open(file_name, 'w', encoding='utf-8') as fw: + fw.write(management_str) + fw.flush() + print(f"写入文件 {file_name} 成功") + except IOError as e: + print(f"写入文件 {file_name} 时出错: {e}") + + # 构建 time_str 字符串 + time_str = [] + for i in range(self.Mnum): + row = [] + for j in range(self.Wnum): + row.append(f"{self.Time[i][j]}\t{self.Time[i][j] + self.cost[self.management[i][j]][i]}") + time_str.append('\t'.join(row)) + time_str = '\n'.join(time_str) + + # 写入 time.txt 文件 + file_name = "output/time.txt" + try: + with open(file_name, 'w', encoding='utf-8') as fw: + fw.write(time_str) + fw.flush() + print(f"写入文件 {file_name} 成功") + except IOError as e: + print(f"写入文件 {file_name} 时出错: {e}") + + def reset_for_new_round(self): #重置所有的参数 + for i in range(self.Wnum): + self.W[i].reset() + for i in range(self.Mnum): + self.M[i].reset() + + def print_data(self): + print(f"工件数量: {self.Wnum}") + print(f"机器数量: {self.Mnum}") + print("加工时间 (cost):") + for row in self.cost: + print(row) + print("工件调度顺序 (management):") + for man in self.management: + print(man) + print("开始加工时间 (Time):") + for row in self.Time: + print(row) + print("机器状态 (M):") + for machine in self.M: + print(machine) + print("工件状态 (W):") + for workpiece in self.W: + print(workpiece) \ No newline at end of file diff --git a/pfsp_simulated_annealing/solution.py b/pfsp_simulated_annealing/solution.py new file mode 100644 index 0000000..418d47b --- /dev/null +++ b/pfsp_simulated_annealing/solution.py @@ -0,0 +1,74 @@ +import math +import random +from pfsp_simulated_annealing.simulate import Simulate +import os + + +def main(): + print(os.getcwd()) + # 读取输入文件 + try: + with open('data/input.txt', 'r', encoding='utf-8') as f: + lines = f.readlines() + # 提取 n 和 m + n, m = map(int, lines[0].split()) + + # 提取 p + p = [] + for line in lines[1:]: + data = list(map(int, line.split())) + # 跳过机器序号,从索引1开始,每隔两个元素提取一个元素(加工时间) + for j in range(1, m + 1): + p.append(data[2 * j - 1]) # 提取加工时间 + + print(f"工件数n: {n}, 机器数m: {m}") # 打印 n 和 m + print(f"p: {p}") # 打印 p + + except FileNotFoundError: + print("文件未找到!") + return + + # 初始化模拟退火 + sim = Simulate(n, m, p) + sim.random_reset() + current_t = 1061109567 + count, count1 = 0, 0 + trace = [] + T = 10000.0 + i = 0 + + while True: + print(f"当前第{i}次计算, 当前耗时{current_t}") + T *= 0.999 + sim.random_exchange() + sim.reset_for_new_round() + new_t = sim.f() + if new_t < current_t: #如果耗时更少,那就接收 + current_t = new_t + count = 0 + count1 = 0 + else: + # 使用math.exp计算接受概率 + if random.random() < math.exp((current_t - new_t) / T): + if current_t == new_t: + count1 += 1 + else: + count1 = 0 + current_t = new_t + count = 0 + else: + sim.roll_back() + count += 1 + if current_t == new_t: + count1 += 1 + if count > 100 or count1 > 100: #count > 100 || count1 > 100作为终止条件。 + print("总完成时间为:", current_t) + sim.output_data() + with open('data/trace.txt', 'w') as f: + f.write('\t'.join(map(str, trace))) + return + trace.append(current_t) + i += 1 + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/pfsp_simulated_annealing/trace.jpg b/pfsp_simulated_annealing/trace.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8db9d37834cfaff62ffe2ea4bb8162b161c98102 GIT binary patch literal 22710 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 literal 0 HcmV?d00001 diff --git a/pfsp_simulated_annealing/workpiece.py b/pfsp_simulated_annealing/workpiece.py new file mode 100644 index 0000000..d7c9fc4 --- /dev/null +++ b/pfsp_simulated_annealing/workpiece.py @@ -0,0 +1,27 @@ +class Workpiece: + def __init__(self): + self.being_processed = -1 # 当前正在处理的机器索引(-1表示尚未开始处理)被哪台机器加工 + self.left_time = 0 # 剩余处理时间 初始为0 为0时,表示该工件在当前机器上的处理已完成。 + + def being_pro(self): + """获取当前正在处理的机器索引""" + return self.being_processed + + def left_time(self): + """获取剩余处理时间""" + return self.left_time + + def next_time(self): + """减少剩余处理时间""" + if self.left_time > 0: + self.left_time -= 1 + + def next_machine(self, time): + """转移到下一台机器并设置处理时间,因为加工顺序必须是从0 1 2 3 4 这样一台台排下去的""" + self.being_processed += 1 + self.left_time = time + + def reset(self): + """重置工件状态""" + self.being_processed = -1 + self.left_time = 0 \ No newline at end of file diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_simulate.py b/tests/test_simulate.py new file mode 100644 index 0000000..e69de29