最近我们小组做了建模训练,选择的题目是21年的国赛C题,我负责软件部分,这题我刚好会做,第一次独自完成了代码,有点激动,和大家分享一下,共同学习,不过因为我个人比较懒,讲解的不怎么多。。。不过会分享一下完整的代码
其实我的代码还有点问题,转运方案没有按照它的要求,当时没注意到这个问题,所以输出的结果和题目给的表格不太一样。
我路子可能比较野,写的代码有点杂乱无章,感觉算小屎堆了(悲)
因为事后没有整理,所以代码会有一些多余的部分,是当时用过后发,之后又不用的。。。
我也是个建模新手,还有很多不足的地方,欢迎大家指出我的错误,一起交流
大家会看到一个Excel,叫‘问题1评分排名.xlsx’,当时鬼迷心窍弄成这样,现在一看实属脱裤子放屁。这个表格大家复制就能用了
供应商ID | 材料成本 | 总供货量 | 订单数 | 达标率 | 评分 | 排名 |
S001 | 1.1 | 49 | 25 | 0.208791 | 6.15234E-05 | 289 |
S002 | 1.2 | 273 | 71 | 0.673684 | 0.000692156 | 105 |
S003 | 1 | 13138 | 191 | 0.854271 | 0.036944482 | 43 |
S004 | 1.1 | 64 | 33 | 0.203883 | 0.000103899 | 245 |
S005 | 1.2 | 6912 | 107 | 0.903509 | 0.019399394 | 54 |
S006 | 1 | 30 | 13 | 0.2 | 1.01257E-05 | 387 |
S007 | 1.2 | 6948 | 240 | 0.866667 | 0.019501409 | 53 |
S008 | 1 | 41 | 15 | 0.25 | 3.79261E-05 | 313 |
S009 | 1.1 | 31 | 19 | 0.15 | 1.51885E-05 | 348 |
S010 | 1.1 | 170 | 32 | 0.227273 | 0.000400748 | 129 |
S011 | 1 | 85 | 32 | 0.651163 | 0.00016209 | 187 |
S012 | 1.2 | 29 | 12 | 0.147059 | 8.21066E-06 | 397 |
S013 | 1 | 44 | 20 | 0.655172 | 4.70146E-05 | 304 |
S014 | 1.2 | 28 | 16 | 0.592593 | 1.05163E-05 | 381 |
S015 | 1.2 | 28 | 15 | 0.277778 | 9.81485E-06 | 388 |
S016 | 1.2 | 37 | 17 | 0.727273 | 2.77322E-05 | 324 |
S017 | 1.2 | 138 | 25 | 0.313433 | 0.000310438 | 153 |
S018 | 1.1 | 66 | 31 | 0.347222 | 0.00010913 | 233 |
S019 | 1.1 | 109 | 12 | 0.155172 | 0.00022839 | 173 |
S020 | 1 | 72 | 33 | 0.235955 | 0.000126006 | 210 |
S021 | 1.2 | 80 | 42 | 0.629032 | 0.000149329 | 195 |
S022 | 1.2 | 140 | 16 | 0.19697 | 0.000315793 | 150 |
S023 | 1 | 1631 | 133 | 0.60625 | 0.00451823 | 59 |
S024 | 1.1 | 124 | 45 | 0.441558 | 0.000272282 | 163 |
S025 | 1 | 375 | 126 | 0.859259 | 0.000981768 | 91 |
S026 | 1.2 | 28 | 14 | 0.823529 | 9.11532E-06 | 392 |
S027 | 1.2 | 81 | 30 | 0.595745 | 0.000150732 | 193 |
S028 | 1.1 | 106 | 19 | 0.346939 | 0.000220167 | 175 |
S029 | 1.1 | 68 | 29 | 0.211111 | 0.000114417 | 228 |
S030 | 1.2 | 162 | 28 | 0.965517 | 0.000378089 | 133 |
S031 | 1.1 | 41207 | 240 | 0.925 | 0.11604338 | 30 |
S032 | 1 | 71 | 30 | 0.390625 | 0.000122868 | 215 |
S033 | 1 | 30 | 17 | 0.842105 | 1.25537E-05 | 364 |
S034 | 1 | 30 | 14 | 0.090909 | 1.07151E-05 | 379 |
S035 | 1.2 | 144 | 55 | 0.42 | 0.000329074 | 145 |
S036 | 1.1 | 124 | 49 | 0.87037 | 0.000272614 | 162 |
S037 | 1 | 50686 | 157 | 0.900621 | 0.142755327 | 25 |
S038 | 1.2 | 36 | 22 | 0.1875 | 2.69251E-05 | 327 |
S039 | 1 | 385 | 45 | 0.634921 | 0.001006506 | 87 |
S040 | 1.1 | 31905 | 240 | 0.904167 | 0.089830187 | 31 |
S041 | 1 | 71 | 28 | 0.322581 | 0.000122644 | 216 |
S042 | 1.2 | 138 | 25 | 0.339286 | 0.000310438 | 152 |
S043 | 1.2 | 39 | 18 | 0.220588 | 3.32102E-05 | 318 |
S044 | 1 | 30 | 14 | 0.764706 | 1.07163E-05 | 377 |
S045 | 1.1 | 31 | 20 | 0.219512 | 1.57757E-05 | 346 |
S046 | 1.2 | 197 | 140 | 0.654088 | 0.000486107 | 119 |
S047 | 1.1 | 66 | 28 | 0.202247 | 0.000108744 | 237 |
S048 | 1.1 | 65 | 26 | 0.44 | 0.000105729 | 243 |
S049 | 1.2 | 38 | 19 | 0.44186 | 3.08765E-05 | 320 |
S050 | 1.1 | 66 | 29 | 0.90625 | 0.000108869 | 235 |
S051 | 1.2 | 29 | 15 | 0.196721 | 1.02113E-05 | 385 |
S052 | 1.2 | 54 | 25 | 0.533333 | 7.51754E-05 | 271 |
S053 | 1.2 | 77 | 31 | 1 | 0.000139675 | 200 |
S054 | 1.1 | 413 | 113 | 0.744186 | 0.001087772 | 70 |
S055 | 1.1 | 24041 | 240 | 0.9 | 0.067669324 | 35 |
S056 | 1.2 | 28 | 17 | 0.295455 | 1.12168E-05 | 375 |
S057 | 1.1 | 50 | 22 | 0.344828 | 6.37202E-05 | 285 |
S058 | 1.1 | 34 | 20 | 0.210526 | 2.15241E-05 | 337 |
S059 | 1 | 47 | 47 | 0.346939 | 6.25025E-05 | 288 |
S060 | 1 | 86 | 10 | 0.36 | 0.000163567 | 186 |
S061 | 1 | 84 | 30 | 0.373134 | 0.000159113 | 189 |
S062 | 1.2 | 75 | 5 | 0.235294 | 0.000132477 | 203 |
S063 | 1 | 30 | 21 | 0.207792 | 1.51106E-05 | 350 |
S064 | 1.2 | 397 | 126 | 0.902985 | 0.001043531 | 80 |
S065 | 1.2 | 189 | 64 | 0.613636 | 0.000455845 | 123 |
S066 | 1.2 | 388 | 132 | 0.851064 | 0.001018631 | 84 |
S067 | 1 | 233 | 169 | 0.988166 | 0.000589569 | 112 |
S068 | 1 | 42 | 16 | 0.15942 | 4.08295E-05 | 309 |
S069 | 1.1 | 169 | 70 | 0.561224 | 0.000400273 | 130 |
S070 | 1 | 46 | 26 | 0.742857 | 5.36666E-05 | 300 |
S071 | 1.2 | 191 | 12 | 0.083333 | 0.000459402 | 122 |
S072 | 1.2 | 28 | 17 | 0.317073 | 1.12168E-05 | 374 |
S073 | 1.1 | 32 | 17 | 0.73913 | 1.59024E-05 | 345 |
S074 | 1 | 13051 | 171 | 0.721311 | 0.03669927 | 44 |
S075 | 1.2 | 390 | 125 | 0.850746 | 0.001023817 | 83 |
S076 | 1 | 376 | 197 | 0.915423 | 0.00099024 | 89 |
S077 | 1.1 | 128 | 12 | 0.172414 | 0.000281908 | 161 |
S078 | 1.2 | 8553 | 101 | 0.794393 | 0.024023726 | 50 |
S079 | 1.1 | 64 | 24 | 0.403846 | 0.000102722 | 248 |
S080 | 1 | 19237 | 240 | 0.875 | 0.054131604 | 37 |
S081 | 1.1 | 49 | 23 | 0.677419 | 6.11551E-05 | 290 |
S082 | 1.2 | 58 | 27 | 0.277778 | 8.64829E-05 | 263 |
S083 | 1.2 | 28 | 14 | 0.375 | 9.11406E-06 | 393 |
S084 | 1 | 70 | 18 | 0.211268 | 0.000118955 | 220 |
S085 | 1 | 46 | 23 | 0.357143 | 5.3017E-05 | 301 |
S086 | 1 | 17949 | 206 | 0.842105 | 0.050501943 | 39 |
S087 | 1.2 | 64 | 27 | 0.657895 | 0.000103073 | 246 |
S088 | 1.1 | 425 | 139 | 0.823529 | 0.001122924 | 64 |
S089 | 1.2 | 141 | 25 | 0.55814 | 0.00031888 | 149 |
S090 | 1 | 145 | 29 | 0.627907 | 0.000330292 | 144 |
S091 | 1.2 | 73 | 29 | 0.519231 | 0.000128321 | 206 |
S092 | 1.1 | 398 | 126 | 0.884615 | 0.001046339 | 77 |
S093 | 1.2 | 36 | 12 | 0.169492 | 2.38267E-05 | 333 |
S094 | 1 | 41 | 24 | 0.411765 | 4.00253E-05 | 311 |
S095 | 1.1 | 32 | 13 | 0.140845 | 1.40651E-05 | 358 |
S096 | 1.2 | 73 | 28 | 0.462963 | 0.000128216 | 208 |
S097 | 1.2 | 63 | 30 | 0.297297 | 0.000100704 | 249 |
S098 | 1.1 | 413 | 206 | 0.92823 | 0.001094404 | 68 |
S099 | 1.2 | 60 | 25 | 0.536585 | 9.17327E-05 | 259 |
S100 | 1 | 42 | 16 | 0.098901 | 4.08295E-05 | 310 |
S101 | 1.2 | 56 | 25 | 0.232877 | 8.06782E-05 | 266 |
S102 | 1.2 | 131 | 50 | 0.5 | 0.000292281 | 158 |
S103 | 1 | 30 | 18 | 0.253968 | 1.31827E-05 | 363 |
S104 | 1.2 | 155 | 25 | 0.263889 | 0.000358284 | 137 |
S105 | 1.1 | 120 | 25 | 0.345455 | 0.000259803 | 167 |
S106 | 1.2 | 77 | 37 | 0.923077 | 0.00014037 | 197 |
S107 | 1 | 69 | 29 | 0.365079 | 0.000117194 | 224 |
S108 | 1.1 | 240950 | 240 | 0.945833 | 0.678923185 | 4 |
S109 | 1.2 | 36 | 19 | 0.321429 | 2.58355E-05 | 328 |
S110 | 1 | 426 | 128 | 0.707792 | 0.001125096 | 63 |
S111 | 1.1 | 31 | 16 | 0.368421 | 1.34925E-05 | 361 |
S112 | 1.1 | 123 | 5 | 0.3125 | 0.000267727 | 165 |
S113 | 1 | 385 | 126 | 0.901515 | 0.001009839 | 86 |
S114 | 1.2 | 10931 | 229 | 0.852814 | 0.030725282 | 45 |
S115 | 1.2 | 398 | 121 | 0.723404 | 0.001046052 | 79 |
S116 | 1.2 | 75 | 23 | 0.594595 | 0.000133342 | 202 |
S117 | 1.1 | 123 | 61 | 0.438776 | 0.000270995 | 164 |
S118 | 1.1 | 66 | 28 | 0.357143 | 0.000108744 | 236 |
S119 | 1.2 | 29 | 9 | 0.170213 | 6.27734E-06 | 401 |
S120 | 1.1 | 33 | 16 | 0.40625 | 1.75815E-05 | 343 |
S121 | 1.2 | 137 | 26 | 0.444444 | 0.000307664 | 154 |
S122 | 1.2 | 73 | 31 | 0.644444 | 0.000128543 | 205 |
S123 | 1.2 | 6449 | 240 | 0.808333 | 0.018095272 | 56 |
S124 | 1.1 | 34 | 14 | 0.4 | 1.92079E-05 | 340 |
S125 | 1.1 | 49 | 16 | 0.186441 | 6.01054E-05 | 292 |
S126 | 1 | 47540 | 91 | 0.84 | 0.133889811 | 27 |
S127 | 1.2 | 158 | 24 | 0.328125 | 0.000366697 | 135 |
S128 | 1.2 | 133 | 51 | 0.661972 | 0.00029796 | 157 |
S129 | 1 | 1525 | 192 | 0.778325 | 0.004220692 | 60 |
S130 | 1.2 | 60 | 28 | 0.197917 | 9.21415E-05 | 258 |
S131 | 1.1 | 137512 | 240 | 0.908333 | 0.387432777 | 11 |
S132 | 1.2 | 63 | 28 | 0.54 | 0.00010043 | 250 |
S133 | 1 | 71 | 26 | 0.766667 | 0.000122436 | 217 |
S134 | 1.1 | 52 | 21 | 0.276923 | 6.90704E-05 | 280 |
S135 | 1 | 87 | 5 | 0.238095 | 0.000166287 | 183 |
S136 | 1 | 42 | 19 | 0.409091 | 4.1421E-05 | 308 |
S137 | 1.1 | 33 | 19 | 0.178571 | 1.89143E-05 | 341 |
S138 | 1.1 | 411 | 142 | 0.761006 | 0.001083814 | 72 |
S139 | 1.1 | 151862 | 222 | 0.96875 | 0.427871368 | 10 |
S140 | 1.1 | 302047 | 219 | 0.886364 | 0.851095789 | 3 |
S141 | 1.1 | 420 | 120 | 0.853846 | 0.001107806 | 67 |
S142 | 1.1 | 121 | 15 | 0.304348 | 0.00026226 | 166 |
S143 | 1.2 | 82787 | 240 | 0.895833 | 0.233216619 | 20 |
S144 | 1.2 | 28 | 3 | 0.15 | 1.40666E-06 | 402 |
S145 | 1.2 | 63 | 28 | 0.30137 | 0.00010043 | 251 |
S146 | 1.1 | 352 | 169 | 0.71123 | 0.000920596 | 98 |
S147 | 1.1 | 108 | 8 | 0.35 | 0.000225495 | 174 |
S148 | 1.2 | 59 | 27 | 0.175 | 8.92396E-05 | 260 |
S149 | 1 | 251 | 72 | 0.864198 | 0.000630385 | 108 |
S150 | 1.2 | 1806 | 240 | 0.795833 | 0.005013227 | 57 |
S151 | 1 | 194498 | 240 | 0.954167 | 0.548020493 | 5 |
S152 | 1.2 | 398 | 124 | 0.708029 | 0.001046223 | 78 |
S153 | 1.1 | 175 | 13 | 0.178571 | 0.000414334 | 128 |
S154 | 1.2 | 7634 | 77 | 0.615385 | 0.02143393 | 52 |
S155 | 1.2 | 40 | 19 | 0.277778 | 3.60939E-05 | 315 |
S156 | 1.2 | 28 | 16 | 0.229167 | 1.05157E-05 | 384 |
S157 | 1.2 | 395 | 120 | 0.840909 | 0.001037569 | 81 |
S158 | 1.2 | 37 | 20 | 0.352941 | 2.86471E-05 | 321 |
S159 | 1.2 | 215 | 47 | 0.463415 | 0.000527955 | 116 |
S160 | 1 | 45 | 20 | 0.220588 | 4.97234E-05 | 303 |
S161 | 1 | 47 | 20 | 0.194444 | 5.51741E-05 | 298 |
S162 | 1 | 28 | 14 | 0.101124 | 9.11309E-06 | 394 |
S163 | 1.2 | 252 | 46 | 0.461538 | 0.000632024 | 107 |
S164 | 1 | 72 | 22 | 0.217949 | 0.000124864 | 212 |
S165 | 1.2 | 75 | 63 | 0.589474 | 0.000139395 | 201 |
S166 | 1.1 | 32 | 16 | 0.307692 | 1.54154E-05 | 347 |
S167 | 1.2 | 136 | 28 | 0.3 | 0.000304934 | 155 |
S168 | 1.1 | 31 | 17 | 0.2 | 1.40455E-05 | 359 |
S169 | 1.1 | 359 | 118 | 0.95122 | 0.000936361 | 94 |
S170 | 1.2 | 135 | 24 | 0.512195 | 0.000301959 | 156 |
S171 | 1 | 72 | 29 | 0.396825 | 0.000125537 | 211 |
S172 | 1.1 | 356 | 128 | 0.861314 | 0.000928584 | 96 |
S173 | 1 | 372 | 16 | 0.358974 | 0.000969456 | 92 |
S174 | 1.1 | 346 | 125 | 0.984127 | 0.000900333 | 100 |
S175 | 1.1 | 366 | 138 | 0.964539 | 0.000957316 | 93 |
S176 | 1.1 | 51 | 51 | 0.4875 | 7.36843E-05 | 274 |
S177 | 1 | 47 | 21 | 0.233766 | 5.53475E-05 | 297 |
S178 | 1.2 | 163 | 45 | 1 | 0.000381681 | 131 |
S179 | 1.1 | 31 | 14 | 0.162162 | 1.24307E-05 | 366 |
S180 | 1.1 | 52 | 52 | 0.847458 | 7.65001E-05 | 269 |
S181 | 1.2 | 36 | 16 | 0.189655 | 2.48761E-05 | 331 |
S182 | 1 | 153 | 27 | 0.541667 | 0.000352724 | 139 |
S183 | 1 | 28 | 15 | 0.146341 | 9.81411E-06 | 390 |
S184 | 1.2 | 73 | 26 | 0.415094 | 0.000128016 | 209 |
S185 | 1.2 | 64 | 26 | 0.240964 | 0.000102951 | 247 |
S186 | 1 | 377 | 122 | 0.787879 | 0.000987137 | 90 |
S187 | 1.2 | 74 | 26 | 0.27381 | 0.000130808 | 204 |
S188 | 1.1 | 51 | 23 | 0.884615 | 6.66242E-05 | 283 |
S189 | 1.2 | 8892 | 151 | 0.855346 | 0.024979151 | 48 |
S190 | 1.1 | 48 | 3 | 0.142857 | 5.63779E-05 | 296 |
S191 | 1.1 | 351 | 119 | 0.75188 | 0.000913968 | 99 |
S192 | 1 | 30 | 16 | 0.176471 | 1.19304E-05 | 368 |
S193 | 1.1 | 101 | 25 | 0.8 | 0.000206402 | 176 |
S194 | 1 | 101365 | 240 | 0.945833 | 0.285569797 | 17 |
S195 | 1.2 | 36 | 17 | 0.341463 | 2.51805E-05 | 330 |
S196 | 1.2 | 40 | 20 | 0.416667 | 3.63449E-05 | 314 |
S197 | 1.1 | 354 | 119 | 0.848 | 0.000922388 | 97 |
S198 | 1.2 | 54 | 22 | 0.149425 | 7.47328E-05 | 273 |
S199 | 1.1 | 130 | 30 | 0.5625 | 0.000288156 | 159 |
S200 | 1.1 | 65 | 30 | 0.328767 | 0.00010623 | 242 |
S201 | 1.2 | 81989 | 28 | 0.530612 | 0.23096779 | 21 |
S202 | 1.1 | 400 | 127 | 0.87218 | 0.001052014 | 76 |
S203 | 1.2 | 36 | 23 | 0.821429 | 2.73152E-05 | 325 |
S204 | 1.2 | 81 | 5 | 0.148148 | 0.000149381 | 194 |
S205 | 1.2 | 60 | 30 | 0.295775 | 9.24397E-05 | 256 |
S206 | 1 | 31 | 14 | 0.933333 | 1.24321E-05 | 365 |
S207 | 1 | 154 | 44 | 0.406593 | 0.000356347 | 138 |
S208 | 1.2 | 8757 | 90 | 0.531746 | 0.02459858 | 49 |
S209 | 1.2 | 163 | 37 | 0.39726 | 0.000381269 | 132 |
S210 | 1 | 15694 | 118 | 0.661871 | 0.044147185 | 41 |
S211 | 1.2 | 58 | 54 | 0.83871 | 9.2344E-05 | 257 |
S212 | 1 | 31 | 10 | 0.088235 | 1.05487E-05 | 380 |
S213 | 1 | 246 | 163 | 0.957831 | 0.00062473 | 109 |
S214 | 1.1 | 52 | 52 | 0.451613 | 7.64999E-05 | 270 |
S215 | 1.1 | 50 | 14 | 0.131579 | 6.26627E-05 | 287 |
S216 | 1.1 | 425 | 129 | 0.716216 | 0.001122343 | 65 |
S217 | 1.2 | 139 | 20 | 0.372093 | 0.000313084 | 151 |
S218 | 1 | 15483 | 240 | 0.929167 | 0.043552818 | 42 |
S219 | 1.2 | 36 | 25 | 0.666667 | 2.81304E-05 | 322 |
S220 | 1 | 70 | 28 | 0.387097 | 0.000119861 | 219 |
S221 | 1.2 | 392 | 123 | 0.97619 | 0.001029315 | 82 |
S222 | 1.1 | 32 | 15 | 0.384615 | 1.49461E-05 | 351 |
S223 | 1 | 28 | 17 | 0.378378 | 1.12163E-05 | 376 |
S224 | 1.1 | 108 | 95 | 0.781818 | 0.000234872 | 172 |
S225 | 1.1 | 32 | 14 | 0.8125 | 1.44962E-05 | 352 |
S226 | 1.2 | 200 | 34 | 0.440678 | 0.000485251 | 120 |
S227 | 1.2 | 254 | 30 | 0.692308 | 0.000637197 | 106 |
S228 | 1 | 151 | 15 | 0.22807 | 0.000346755 | 140 |
S229 | 1.2 | 354887 | 240 | 0.945833 | 0.999999989 | 1 |
S230 | 1.1 | 52 | 25 | 0.676471 | 6.96937E-05 | 279 |
S231 | 1 | 31 | 16 | 0.141026 | 1.34922E-05 | 362 |
S232 | 1.1 | 119 | 26 | 0.575 | 0.000257038 | 169 |
S233 | 1.1 | 179 | 57 | 0.564706 | 0.000427327 | 127 |
S234 | 1 | 45 | 45 | 0.277228 | 5.69767E-05 | 295 |
S235 | 1.1 | 189 | 31 | 0.763158 | 0.000454188 | 124 |
S236 | 1 | 28 | 16 | 0.6 | 1.05158E-05 | 383 |
S237 | 1.2 | 328 | 119 | 0.942149 | 0.00084944 | 102 |
S238 | 1.1 | 32 | 3 | 0.036364 | 1.13591E-05 | 372 |
S239 | 1 | 430 | 145 | 0.986207 | 0.001137328 | 61 |
S240 | 1.1 | 49 | 5 | 0.078125 | 5.92449E-05 | 293 |
S241 | 1 | 28 | 11 | 0.142857 | 7.01013E-06 | 398 |
S242 | 1.2 | 79 | 29 | 0.384615 | 0.000145053 | 196 |
S243 | 1.2 | 63 | 27 | 0.22093 | 0.000100301 | 253 |
S244 | 1 | 16406 | 240 | 0.870833 | 0.046153833 | 40 |
S245 | 1 | 386 | 152 | 0.803681 | 0.001014384 | 85 |
S246 | 1 | 44 | 18 | 0.180556 | 4.66366E-05 | 305 |
S247 | 1 | 56698 | 240 | 0.945833 | 0.159697306 | 24 |
S248 | 1.1 | 69 | 30 | 0.305882 | 0.000117314 | 223 |
S249 | 1.1 | 67 | 31 | 0.45 | 0.000111897 | 229 |
S250 | 1.2 | 35 | 12 | 0.578947 | 2.11804E-05 | 338 |
S251 | 1.2 | 36 | 6 | 0.092593 | 2.28153E-05 | 335 |
S252 | 1 | 48 | 24 | 0.322034 | 5.86212E-05 | 294 |
S253 | 1 | 223 | 68 | 0.930556 | 0.000551517 | 114 |
S254 | 1.2 | 161 | 26 | 0.533333 | 0.000375206 | 134 |
S255 | 1.2 | 36 | 18 | 0.444444 | 2.55005E-05 | 329 |
S256 | 1.1 | 411 | 123 | 0.853846 | 0.001082681 | 73 |
S257 | 1 | 31 | 13 | 0.196078 | 1.19263E-05 | 370 |
S258 | 1.1 | 414 | 125 | 0.75 | 0.00109122 | 69 |
S259 | 1.1 | 67 | 30 | 0.518519 | 0.000111767 | 231 |
S260 | 1.1 | 184 | 128 | 0.751724 | 0.000448532 | 125 |
S261 | 1.1 | 69 | 31 | 0.415385 | 0.000117437 | 222 |
S262 | 1 | 28 | 13 | 0.178571 | 8.41215E-06 | 395 |
S263 | 1 | 427 | 132 | 0.789474 | 0.00112813 | 62 |
S264 | 1.1 | 32 | 5 | 0.5 | 1.16162E-05 | 371 |
S265 | 1.2 | 141 | 59 | 0.6 | 0.000321021 | 148 |
S266 | 1.2 | 6519 | 240 | 0.870833 | 0.018292525 | 55 |
S267 | 1 | 82 | 62 | 0.539326 | 0.000158066 | 190 |
S268 | 1 | 129786 | 240 | 0.9375 | 0.365660752 | 15 |
S269 | 1.2 | 211 | 143 | 0.845161 | 0.000525212 | 117 |
S270 | 1 | 92 | 58 | 0.859375 | 0.000184726 | 177 |
S271 | 1 | 247 | 49 | 0.709677 | 0.000618063 | 111 |
S272 | 1.1 | 32 | 14 | 0.777778 | 1.44961E-05 | 353 |
S273 | 1.2 | 9484 | 90 | 0.838384 | 0.026647274 | 46 |
S274 | 1.2 | 77 | 32 | 0.591837 | 0.000139782 | 198 |
S275 | 1.2 | 158553 | 240 | 0.945833 | 0.446726745 | 8 |
S276 | 1.1 | 52 | 19 | 0.192308 | 6.87995E-05 | 281 |
S277 | 1 | 30 | 16 | 0.146341 | 1.19303E-05 | 369 |
S278 | 1.2 | 62 | 26 | 0.216867 | 9.74022E-05 | 255 |
S279 | 1 | 89 | 36 | 0.693878 | 0.000173641 | 179 |
S280 | 1.1 | 127 | 75 | 0.474138 | 0.000283765 | 160 |
S281 | 1.2 | 36 | 15 | 0.265306 | 2.4588E-05 | 332 |
S282 | 1.2 | 169340 | 240 | 0.9875 | 0.477124733 | 7 |
S283 | 1.2 | 30 | 14 | 0.088235 | 1.07157E-05 | 378 |
S284 | 1 | 46597 | 240 | 1 | 0.131232498 | 28 |
S285 | 1.2 | 35 | 19 | 0.177215 | 2.34169E-05 | 334 |
S286 | 1.1 | 67 | 30 | 0.725 | 0.000111767 | 230 |
S287 | 1.1 | 66 | 6 | 0.1 | 0.000107142 | 239 |
S288 | 1.2 | 30 | 13 | 0.333333 | 1.01264E-05 | 386 |
S289 | 1.2 | 40 | 14 | 0.214286 | 3.50228E-05 | 316 |
S290 | 1 | 31 | 19 | 0.246575 | 1.51885E-05 | 349 |
S291 | 1.2 | 7984 | 219 | 0.86036 | 0.022420682 | 51 |
S292 | 1.2 | 9160 | 90 | 0.618644 | 0.025734238 | 47 |
S293 | 1.2 | 192 | 8 | 0.119403 | 0.000462181 | 121 |
S294 | 1 | 18842 | 240 | 0.879167 | 0.053018492 | 38 |
S295 | 1.2 | 56 | 56 | 0.590361 | 8.782E-05 | 262 |
S296 | 1.2 | 62 | 33 | 0.62 | 9.84036E-05 | 254 |
S297 | 1 | 31 | 14 | 0.162162 | 1.24306E-05 | 367 |
S298 | 1.1 | 51 | 13 | 0.764706 | 6.53583E-05 | 284 |
S299 | 1.2 | 62 | 62 | 0.345588 | 0.000104921 | 244 |
S300 | 1.2 | 299 | 8 | 0.636364 | 0.000763699 | 104 |
S301 | 1 | 89 | 31 | 0.75 | 0.000173181 | 180 |
S302 | 1.2 | 59 | 25 | 0.191011 | 8.89639E-05 | 261 |
S303 | 1.1 | 54 | 9 | 0.642857 | 7.3483E-05 | 275 |
S304 | 1.2 | 156 | 88 | 0.83 | 0.000365824 | 136 |
S305 | 1 | 28 | 16 | 0.75 | 1.05162E-05 | 382 |
S306 | 1 | 126096 | 240 | 0.954167 | 0.355262256 | 16 |
S307 | 1.2 | 78196 | 171 | 0.97093 | 0.220279065 | 22 |
S308 | 1.1 | 136998 | 240 | 0.916667 | 0.385984315 | 12 |
S309 | 1.2 | 37 | 18 | 0.592593 | 2.80229E-05 | 323 |
S310 | 1.1 | 406 | 125 | 0.8125 | 0.001068749 | 74 |
S311 | 1.1 | 65 | 31 | 0.3125 | 0.000106366 | 240 |
S312 | 1.2 | 77 | 32 | 0.508197 | 0.000139782 | 199 |
S313 | 1 | 384 | 38 | 0.463768 | 0.00100355 | 88 |
S314 | 1 | 1670 | 235 | 0.778723 | 0.004630083 | 58 |
S315 | 1.1 | 32 | 12 | 0.423077 | 1.36576E-05 | 360 |
S316 | 1.1 | 69 | 28 | 0.581395 | 0.000117079 | 225 |
S317 | 1.2 | 29 | 21 | 0.2 | 1.43009E-05 | 354 |
S318 | 1.2 | 346 | 99 | 0.88785 | 0.000898758 | 101 |
S319 | 1.1 | 66 | 31 | 0.338028 | 0.00010913 | 234 |
S320 | 1 | 42 | 20 | 0.225806 | 4.16399E-05 | 307 |
S321 | 1.1 | 33 | 2 | 0.166667 | 1.41077E-05 | 356 |
S322 | 1.1 | 68 | 29 | 0.390625 | 0.000114417 | 227 |
S323 | 1.2 | 29 | 12 | 0.461538 | 8.21116E-06 | 396 |
S324 | 1.1 | 424 | 126 | 0.860294 | 0.001119367 | 66 |
S325 | 1 | 73 | 29 | 0.393443 | 0.000128321 | 207 |
S326 | 1 | 82 | 30 | 0.33871 | 0.000153525 | 191 |
S327 | 1.1 | 35 | 17 | 0.517241 | 2.26922E-05 | 336 |
S328 | 1.1 | 33 | 4 | 0.081081 | 1.42463E-05 | 355 |
S329 | 1.2 | 156518 | 240 | 0.941667 | 0.440992074 | 9 |
S330 | 1.1 | 136652 | 240 | 0.9125 | 0.38500928 | 13 |
S331 | 1 | 70 | 50 | 0.513514 | 0.00012324 | 213 |
S332 | 1.2 | 305 | 46 | 0.901961 | 0.000781228 | 103 |
S333 | 1.1 | 178 | 97 | 0.612903 | 0.000428024 | 126 |
S334 | 1 | 148 | 10 | 0.069444 | 0.000338221 | 141 |
S335 | 1.1 | 50 | 18 | 0.288462 | 6.31314E-05 | 286 |
S336 | 1.2 | 144 | 31 | 0.638298 | 0.000327566 | 146 |
S337 | 1.2 | 36 | 22 | 0.7 | 2.69255E-05 | 326 |
S338 | 1.1 | 30109 | 204 | 0.941176 | 0.084768989 | 32 |
S339 | 1 | 44 | 44 | 0.583333 | 5.4236E-05 | 299 |
S340 | 1.1 | 171426 | 240 | 0.941667 | 0.483003123 | 6 |
S341 | 1.2 | 63 | 27 | 0.35 | 0.000100301 | 252 |
S342 | 1 | 224 | 39 | 0.975 | 0.000552974 | 113 |
S343 | 1 | 28 | 11 | 0.114286 | 7.0101E-06 | 399 |
S344 | 1.1 | 54 | 9 | 0.111111 | 7.34829E-05 | 276 |
S345 | 1 | 87 | 14 | 0.393939 | 0.000166513 | 182 |
S346 | 1.1 | 23240 | 240 | 0.870833 | 0.065412097 | 36 |
S347 | 1 | 82 | 28 | 0.347826 | 0.000153346 | 192 |
S348 | 1.2 | 92421 | 194 | 0.919598 | 0.26036541 | 18 |
S349 | 1 | 42 | 23 | 0.571429 | 4.23596E-05 | 306 |
S350 | 1.2 | 39 | 20 | 0.226667 | 3.37387E-05 | 317 |
S351 | 1 | 44 | 37 | 0.948718 | 5.16705E-05 | 302 |
S352 | 1.2 | 89031 | 240 | 0.916667 | 0.250812336 | 19 |
S353 | 1.1 | 68 | 33 | 0.825 | 0.000114931 | 226 |
S354 | 1.2 | 57 | 23 | 0.265625 | 8.3165E-05 | 265 |
S355 | 1 | 31 | 7 | 0.259259 | 9.44272E-06 | 391 |
S356 | 1 | 130307 | 240 | 0.95 | 0.36712894 | 14 |
S357 | 1 | 220 | 54 | 0.75 | 0.000542333 | 115 |
S358 | 1.1 | 34 | 10 | 0.666667 | 1.80475E-05 | 342 |
S359 | 1 | 86 | 33 | 0.645833 | 0.000164977 | 184 |
S360 | 1.1 | 405 | 131 | 0.682119 | 0.001066291 | 75 |
S361 | 1 | 328080 | 240 | 0.879167 | 0.924457321 | 2 |
S362 | 1 | 91 | 69 | 0.985714 | 0.000183823 | 178 |
S363 | 1.2 | 56 | 19 | 0.347826 | 7.99072E-05 | 267 |
S364 | 1.1 | 28763 | 240 | 0.941667 | 0.080975983 | 33 |
S365 | 1 | 41631 | 240 | 0.95 | 0.11723822 | 29 |
S366 | 1.1 | 49 | 49 | 0.770492 | 6.80754E-05 | 282 |
S367 | 1.1 | 26335 | 240 | 0.9 | 0.074133845 | 34 |
S368 | 1 | 86 | 13 | 0.366667 | 0.000163662 | 185 |
S369 | 1 | 146 | 26 | 0.328358 | 0.000332988 | 143 |
S370 | 1.2 | 58 | 25 | 0.48 | 8.61984E-05 | 264 |
S371 | 1.1 | 54 | 24 | 0.242857 | 7.50215E-05 | 272 |
S372 | 1.2 | 29 | 10 | 0.25641 | 6.9109E-06 | 400 |
S373 | 1.2 | 30 | 15 | 0.169014 | 1.13179E-05 | 373 |
S374 | 1 | 49224 | 240 | 0.995833 | 0.138635433 | 26 |
S375 | 1.1 | 112 | 13 | 0.131148 | 0.000236863 | 171 |
S376 | 1.1 | 358 | 121 | 0.789855 | 0.00093374 | 95 |
S377 | 1 | 71 | 31 | 0.491228 | 0.000122986 | 214 |
S378 | 1.1 | 49 | 21 | 0.309091 | 6.08165E-05 | 291 |
S379 | 1 | 249 | 36 | 0.972973 | 0.000623265 | 110 |
S380 | 1 | 85 | 25 | 0.46 | 0.000161506 | 188 |
S381 | 1.2 | 201 | 28 | 0.84375 | 0.000487885 | 118 |
S382 | 1 | 28 | 15 | 0.378378 | 9.81437E-06 | 389 |
S383 | 1 | 147 | 27 | 0.735294 | 0.000335839 | 142 |
S384 | 1 | 89 | 19 | 0.326087 | 0.000172362 | 181 |
S385 | 1.1 | 53 | 24 | 0.243902 | 7.22719E-05 | 277 |
S386 | 1.1 | 119 | 41 | 0.703704 | 0.000257968 | 168 |
S387 | 1.1 | 33 | 13 | 0.171053 | 1.64103E-05 | 344 |
S388 | 1.1 | 114 | 64 | 0.901408 | 0.00024634 | 170 |
S389 | 1.1 | 69 | 31 | 0.543478 | 0.000117437 | 221 |
S390 | 1.1 | 66 | 13 | 0.204082 | 0.000107415 | 238 |
S391 | 1 | 70 | 31 | 0.303797 | 0.000120211 | 218 |
S392 | 1.1 | 412 | 129 | 0.847826 | 0.00108583 | 71 |
S393 | 1.1 | 33 | 1 | 0 | 1.40902E-05 | 357 |
S394 | 1.2 | 144 | 10 | 0.136364 | 0.000326951 | 147 |
S395 | 1.2 | 75843 | 74 | 0.869048 | 0.213648241 | 23 |
S396 | 1.2 | 38 | 25 | 0.21978 | 3.28205E-05 | 319 |
S397 | 1.1 | 52 | 52 | 0.864407 | 7.65001E-05 | 268 |
S398 | 1 | 41 | 16 | 0.35 | 3.81135E-05 | 312 |
S399 | 1.1 | 65 | 30 | 0.360656 | 0.00010623 | 241 |
S400 | 1.1 | 53 | 13 | 0.166667 | 7.0951E-05 | 278 |
S401 | 1.1 | 67 | 29 | 0.373134 | 0.000111642 | 232 |
S402 | 1.1 | 35 | 8 | 0.054795 | 2.03274E-05 | 339 |
第一问
第一问选取了
材料成本 | 总供货量 | 订单数 | 达标率 |
几个指标,利用熵权topsis法进行排名,取前五十名
不过数据处理的代码里还有一些计算其他的,写了但是没用上。。。
熵权topsis代码非原创,是借鉴了某位大佬的,不过我忘记是哪位的了。。。。
如果大佬不满意的话请联系我,我把它删掉
第一问代码
%%第一问代码 %处理数据 clc;clear [num,txt,raw]=xlsread('附件1 近5年402家供应商的相关数据.xlsx',1); [num2,txt2,raw2]=xlsread('附件1 近5年402家供应商的相关数据.xlsx',2); %计算供给达标周数 sum_hege=zeros(402,1); [m,n]=size(num); for j=1:m for i=1:n if num(j,i)~=0&&num2(j,i)>=num(j,i) sum_hege(j,1)=sum_hege(j,1)+1;%计算供给达标的周数 end end end num_gongji=sum(num~=0,2);%计算企业要求供应商供给的周数 num2_sum=sum(num2,2);%求出供应商一共提供了多少材料; num2_mean=mean(num2,2);%得出平均每个星期提供的材料数量; num2_gongji=sum(num2~=0,2);%计算供应商有供货的周数; num2_wugongji=sum(num2==0,2);%计算没有供货的周数; num2_month=num2_mean*4; dabiaolv=sum_hege./num_gongji; %将材料量化 cailiao=ones(402,1); xunzhaoA = strcmp(txt2(2:end,2),'A');%找出A,标记为1 mA=find(xunzhaoA==1);%找出字符串所在的索引 xunzhaoB = strcmp(txt2(2:end,2),'B');%找出A,标记为1 mB=find(xunzhaoB==1);%找出字符串所在的索引 cailiao(mA)=1.2; cailiao(mB)=1.1; data=[cailiao num2_sum num2_gongji dabiaolv]; bingtu=[sum(num2_sum<100),sum(num2_sum>=100&num2_sum<1000),sum(num2_sum>=1000&num2_sum<10000),sum(num2_sum>=10000)]; pie3(bingtu) legend('供货量小于100','供货量100-1000','供货量1000-10000','供货量大于10000') %% %熵权topsis x=data;%导入数据 [n,m]=size(x); % 数据的归一化处理 [X,ps]=mapminmax(x',0,1); ps.ymin=0.002; % 归一化后的最小值 ps.ymax=0.996; % 归一化后的最大值 ps.yrange=ps.ymax-ps.ymin; % 归一化后的极差 X=mapminmax(x',ps); X=X'; % X为归一化后的数据 % 计算比重 for i=1:n for j=1:m p(i,j)=X(i,j)/sum(X(:,j)); end end %计算熵值 k=1/log(n); for j=1:m e(j)=-k*sum(p(:,j).*log(p(:,j))); end d=ones(1,m)-e; % 计算信息熵冗余度 w=d./sum(d); % 求权值w %TOPSIS综合评价 A=data;%评价矩阵 W=w%权重 [ma,na]=size(A); for i=1:na B(:,i)=A(:,i)*W(i); %得到加权标准化矩阵 end V1=zeros(1,na); %初始化正理想解和负理想解 V2=zeros(1,na); BMAX=max(B); %取加权标准化矩阵每列的最大值和最小值 BMIN=min(B); for i=1:na V1(i)=BMAX(i); V2(i)=BMIN(i); end for i=1:ma C1=B(i,:)-V1; S1(i)=norm(C1); %S1,S2分别为离正理想点和负理想点的距离 C2=B(i,:)-V2; S2(i)=norm(C2); T(i)=S2(i)/(S1(i)+S2(i)); end output=T'%得出评分 xlswrite('评分.xlsx',output)
第二问
为了省事,我直接选择只从以上五十家购买材料,我发现,好像,应该,可能只购买材料A或者只购买材料C,最便宜,不过我当时在储存费用方面考虑欠佳。然后限制条件吧啦吧啦,懒得码字了,直接贴代码了。。。大家有不明白的,或者发现我问题的,欢迎在评论区和我交流
第二问代码
%若出现错误,可能是内存问题,重新运行即可 clc;clear; [num,txt,raw]=xlsread('问题1评分排名.xlsx'); data=xlsread('附件1 近5年402家供应商的相关数据.xlsx',2); index=1:402; num2=[index' num]; num3=sortrows(num2,7);%对排名进行升序 wushi=num3(1:50,:); indexC=find(wushi(:,2)==1); C=wushi(indexC,:); for i=1:20 Max(i)=max(data(C(i,1),:)); end T=28200*0.72; changku=0;%表示出库材料存量 buy=zeros(20,24); A=0; f=100000000;%初始化 X=1000;%模拟次数 count=1; for Xunhuan=1:X for i=1:20 buy(i,1)=min(6000,randi(round([Max(i)*0.3,Max(i)*0.6]))); end if sum(buy(:,1))>=T changku=sum(buy(:,1))-T; Changku(1)=changku; for j=2:24%星期 for i=1:20%供应商 fanwei=min(6000,round([Max(i)*0.3,Max(i)*0.6])); if sum(buy(:,j))<=T||changku<=2*T buy(i,j)=randi(fanwei); if sum(buy(:,j))>=T changku=changku+sum(buy(:,j))-T; if changku>=2*T continue end end end end if sum(buy(:,j))<=T changku=changku-(T-sum(buy(:,j))); end Changku(j)=changku;%记录每周仓库的存储数量 end end %数据合并 Buy=zeros(402,24)*nan; Buy(C(:,1),:)=buy; %% %模拟转运损耗 into=xlsread('附件2 近5年8家转运商的相关数据.xlsx','B2:IG9'); yunshu=zeros(5,24) for j=1:8%第j个转运商 hang=into(j,:); %sunhao=unique(hang); %[m,n]=size(sunhao); for i=1:24 xunzhe=randi(240) yunshu(j,i)=hang(xunzhe) end end %% %实施转运 p=1:8;; a=1;%第a列 transport=zeros(20,24); for i=1:24%24周 a=1;%第a行 R=0;%运输量 yunshu2=[p' yunshu(:,i)]; yunshu2(find(yunshu2(:,2)==0),:)=[];%剔除不运输的转运商 [m,n]=size(yunshu2); yunshu3=sortrows(yunshu2,2)%进行降序 for j=1:20%20家供应商 indexT=yunshu3(a,1); if R<=6000 R=R+buy(j,i); transport(j,i)=indexT; else a=a+1; if a>m a=m; end transport(j,i)=yunshu3(a,1); R=0; R=R+buy(j,i); end end end Transport=zeros(402,24)*nan; Transport(C(:,1),:)=transport; %% %计算损失 Sunshi=zeros(20,24)*nan; for j=1:24;%周 for i=1:20%供应商 Shunshi(i,j)=buy(i,j)*yunshu(transport(i,j),j) end end Shunshi2=zeros(402,24); Shunshi2(C(:,1),:)=Shunshi; if length(find(Changku>=0))==24 && changku>2*T F(count)=sum(sum(buy))*1.5+sum(Changku)*0.5; count=count+1 if F(count-1)<f f=F(count-1); Buy2=Buy; Transport2=Transport; Shunshi3=Shunshi2; xlswrite('问题2损耗',Shunshi3); xlswrite('问题2订购方案',Buy2); xlswrite('问题2运输方案',Transport); end end Xunhuan end x=1:count-1; F2=sort(F,'descend') plot(x,F2,'-k*','linewidth',1) title('\fontname{宋体}有效模拟图'); xlabel('\fontname{宋体}有效模拟次数');; ylabel('\fontname{宋体}花费成本'); set(gca,'FontName','Times New Roman','fontsize',10.5) box on grid on xlim([1,count-1]) figure plot(x,F,'-k*','linewidth',1) title('\fontname{宋体}有效模拟图'); xlabel('\fontname{宋体}有效模拟次数');; ylabel('\fontname{宋体}花费成本'); set(gca,'FontName','Times New Roman','fontsize',10.5) box on grid on xlim([1,count-1])
第三问代码
我的第三问其实和第二问差不多,还是选第一问得出的五十家供应商,只不过变成三种材料都采购了,并且给采购ABC的数量加了个权重,大概就是随机出三个大于0的数,它们的和为1,之后排序,储存在r2里,通过乘这个权重,达到多买A,少买C
第三问代码
这个代码感觉还有非常大大大的优化空间
因为有的时候会模拟出一些离谱的订单方案,比如说连仓库都欠账了之类的所以在最后加了一个判定,通过判定了才是有效模拟,直接count+1,有效模拟次数是count-1。
其实这个判定和 有效模拟次数 这玩意,第二问原本是没的,但是我在第三问写了这玩意之后,就有一种感觉“不行,第二问也要写,多水点图片”,所以每个问都有了
%第三问代码 %若出现某些错误,导致终止程序,可能是内存问题,重新运行即可 clc;clear; [num,txt,raw]=xlsread('问题1评分排名.xlsx'); data=xlsread('附件1 近5年402家供应商的相关数据.xlsx',2); index=1:402; num2=[index' num]; num3=sortrows(num2,7);%对排名进行升序 wushi=num3(1:50,:); %找出卖A的 indexA=find(wushi(:,2)==1.2); A=wushi(indexA,:); %找出卖B的 indexB=find(wushi(:,2)==1.1); B=wushi(indexB,:); %找出卖C的 indexC=find(wushi(:,2)==1); C=wushi(indexC,:); for i=1:16 MaxA(i)=max(data(A(i,1),:)); end for i=1:14 MaxB(i)=max(data(B(i,1),:)); end for i=1:20 MaxC(i)=max(data(C(i,1),:)); end F=[] Buy2=[]; R2=[]; Transport=[]; Shunshi2=[]; f=1000000000; count=1; X=100%模拟次数 for Xunhuan=1:X x=rand(1,3);y=sum(x);r=x/y; r2=sort(r,2) %TA=28200*0.6*r2(3); %TB=28200*0.66*r2(2); %TC=28200*0.72*r2(1); if TC<1 TC=1 end changkuA=0; changkuB=0; changkuC=0;%表示出库材料存量 buyA=zeros(16,24); buyB=zeros(14,24); buyC=zeros(20,24); %% %购买材料A for i=1:16 buyA(i,1)=min(round(TC*0.5),randi(round([MaxA(i)*0.5,MaxA(i)]))); end if sum(buyA(:,1))>=TA changkuA=sum(buyA(:,1))-TA; ChangkuA(1)=changkuA; for j=2:24%星期 for i=1:16%供应商 fanwei=min(round(TC*0.5),randi(round([MaxA(i)*0.5,MaxA(i)]))); if fanwei==0; fanwei=1 end if sum(buyA(:,j))<=TA||changkuA<=2*TA buyA(i,j)=randi(fanwei); if sum(buyA(:,j))>=TA changkuA=changkuA+sum(buyA(:,j))-TA; if changkuA>=2*TA continue end end end end if sum(buyA(:,j))<=TA changkuA=changkuA-(TA-sum(buyA(:,j))); end ChangkuA(j)=changkuA;%记录每周仓库的存储数量 end end %% %购买材料B for i=1:14 buyB(i,1)=min(round(TB*0.5),randi(round([MaxB(i)*0.5,MaxB(i)]))); end if sum(buyB(:,1))>=TB changkuB=sum(buyB(:,1))-TB; ChangkuB(1)=changkuB; for j=2:24%星期 for i=1:14%供应商 fanwei=min(round(TC*0.5),randi(round([MaxB(i)*0.5,MaxB(i)]))); if fanwei==0; fanwei=1; end if sum(buyB(:,j))<=TB||changkuB<=2*TB buyB(i,j)=randi(fanwei); if sum(buyB(:,j))>=TB changkuB=changkuB+sum(buyB(:,j))-TB; if changkuB>=2*TB continue end end end end if sum(buyB(:,j))<=TB changkuB=changkuB-(TB-sum(buyB(:,j))); end ChangkuB(j)=changkuB;%记录每周仓库的存储数量 end end %% %购买材料C for i=1:20 buyC(i,1)=min(round(TC*0.5),randi(round([MaxC(i)*0.5,MaxC(i)]))); end if sum(buyC(:,1))>=TC changkuC=sum(buyC(:,1))-TC; ChangkuC(1)=changkuC; for j=2:24%星期 for i=1:20%供应商 fanwei=min(round(TC*0.5),randi(round([MaxC(i)*0.5,MaxC(i)]))); if fanwei==0 fanwei=1 end if sum(buyC(:,j))<=TC||changkuC<=2*TC buyC(i,j)=randi(fanwei); if sum(buyC(:,j))>=TC changkuC=changkuC+sum(buyC(:,j))-TC; if changkuC>=2*TC continue end end end end if sum(buyC(:,j))<=TC changkuC=changkuC-(TC-sum(buyC(:,j))); end ChangkuC(j)=changkuC;%记录每周仓库的存储数量 end end Buy=zeros(50,24); Buy(A(:,7),:)=buyA; Buy(B(:,7),:)=buyB; Buy(C(:,7),:)=buyC; %数据合并 buy=zeros(402,24)*nan; buy(A(:,1),:)=buyA; buy(B(:,1),:)=buyB; buy(C(:,1),:)=buyC; %xlswrite('订购方案2',buy); %% %模拟转运损耗 fujian2=xlsread('附件2 近5年8家转运商的相关数据.xlsx','B2:IG9'); yunshu=zeros(5,24); for j=1:8%第j个转运商 hang=fujian2(j,:); %sunhao=unique(hang); %[m,n]=size(sunhao); for i=1:24 xunzhe=randi(240); yunshu(j,i)=hang(xunzhe); end end %% %实施转运 p=1:8;%运输排名 transport=zeros(50,24); for i=1:24%24周 a=1;%第a行 R=0;%运输量 yunshu2=[p' yunshu(:,i)]; yunshu2(find(yunshu2(:,2)==0),:)=[];%剔除不运输的转运商 [m,n]=size(yunshu2); yunshu3=sortrows(yunshu2,2);%进行降序 for j=1:50%50家供应商 indexT=yunshu3(a,1); if Buy(j,i)==0 continue end if R<=6000 R=R+Buy(j,i); transport(j,i)=indexT; else a=a+1; if a>m a=m; end transport(j,i)=yunshu3(a,1); R=0; R=R+Buy(j,i); end end end Transport2=ones(402,24)*nan; Transport2(wushi(:,1),:)=transport; %% %计算损失 Sunshi=zeros(50,24); for j=1:24%周 for i=1:50%供应商 if transport(i,j)==0 continue end Shunshi(i,j)=Buy(i,j)*yunshu(transport(i,j),j); end end Shunshi2=ones(402,24)*nan; Shunshi2(wushi(:,1),:)=Shunshi; if length(find(ChangkuA>=0))==24&&length(find(ChangkuB>=0))==24&&length(find(ChangkuC>=0))==24&&sum(sum(Buy))>406080 F(count)=sum(sum(buyA))*1.2+sum(sum(buyB))*1.1+sum(sum(buyC))+0.5*(sum(ChangkuA)+sum(ChangkuB)+sum(ChangkuC))+sum(sum(Buy))*0.5; count=count+1; if F(count-1)<f f=F(count-1); R2=r2; Buy2=buy; Transport3=Transport2; Shunshi3=Shunshi2; xlswrite('问题三订单',Buy2); xlswrite('问题三转运',Transport3); xlswrite('问题三损耗',Shunshi3); end end Xunhuan end %结果画图 x=1:count-1; F2=sort(F,'descend') plot(x,F2,'-k*','linewidth',1) title('\fontname{宋体}有效模拟图'); xlabel('\fontname{宋体}有效模拟次数');; ylabel('\fontname{宋体}花费成本'); set(gca,'FontName','Times New Roman','fontsize',10.5) box on grid on xlim([1,count-1]) figure plot(x,F,'-k*','linewidth',1) title('\fontname{宋体}有效模拟图'); xlabel('\fontname{宋体}有效模拟次数');; ylabel('\fontname{宋体}花费成本'); set(gca,'FontName','Times New Roman','fontsize',10.5) box on grid on xlim([1,count-1])
第四问
第四问和第三问类似,受到另外一篇文章启发,画图发现购买材料C越来越多,B相对平稳,A逐步下降,所以那个权重就变成了多买C,少买A,然后为了产能增加,我经过乱七八糟的计算,我直接取了个产量最多的年份的平均周产量,其实就是算年的之后除48(小声bb),然后取了40625,我就不负责的假设他为了有这么多生产能力
关于生产力提高这方面,我个人认为也能用预测模型预测,未来能达到的产量,预测好之后也能直接放到我这个代码,这个改起来很简单
第四问代码
杂项
这个代码被我删删改改,丢了一部分。。。。
%% %前五十供应商画图 clc;clear [num2,txt2,~]=xlsread('问题1评分排名.xlsx'); index=1:402; num3=[index' num2]; num4=sortrows(num3,7);%对排名进行升序 num5=num4(1:50,:); wushi=sortrows(num5,1); indexA=find(wushi(:,2)==1.2); A=wushi(indexA,:); indexB=find(wushi(:,2)==1.1); B=wushi(indexB,:); indexC=find(wushi(:,2)==1); C=wushi(indexC,:); %平均每周 a1=A(:,3)./420 b1=B(:,3)./420 c1=C(:,3)./420 %平均每月 a2=A(:,3)./60 b2=B(:,3)./60 c2=C(:,3)./60 %每月画图 plot(A(:,1),a2,'-k*','linewidth',1) title('\fontname{宋体}材料A每月平均供应量'); xlabel('\fontname{宋体}供应商\fontname{Times New Roman}ID'); ylabel('\fontname{宋体}材料供应量'); set(gca,'FontName','Times New Roman','fontsize',10.5) box on grid on xlim([1,240]) figure plot(B(:,1),b2,'-k*','linewidth',1) title('\fontname{宋体}材料B每月平均供应量'); xlabel('\fontname{宋体}供应商\fontname{Times New Roman}ID');; ylabel('\fontname{宋体}材料供应量'); set(gca,'FontName','Times New Roman','fontsize',10.5) box on grid on xlim([1,240]) figure plot(C(:,1),c2,'-k*','linewidth',1) title('\fontname{宋体}材料C每月平均供应量'); xlabel('\fontname{宋体}供应商\fontname{Times New Roman}ID'); ylabel('\fontname{宋体}材料供应量'); set(gca,'FontName','Times New Roman','fontsize',10.5) box on grid on xlim([1,240]) %% %分离附件1订单材料ABC clc;clear [num,txt,~]=xlsread('附件1 近5年402家供应商的相关数据.xlsx',1); cailiao=ones(402,1); xunzhaoA = strcmp(txt(2:end,2),'A');%找出A,标记为1 mA=find(xunzhaoA==1);%找出字符串所在的索引 xunzhaoB = strcmp(txt(2:end,2),'B');%找出A,标记为1 mB=find(xunzhaoB==1);%找出字符串所在的索引 xunzhaoC = strcmp(txt(2:end,2),'C');%找出A,标记为1 mC=find(xunzhaoC==1);%找出字符串所在的索引 cailiao(mA)=1.2; cailiao(mB)=1.1; cailiao(mC)=1; indexA=find(cailiao(:,1)==1.2); A=num(indexA,:); indexB=find(cailiao(:,1)==1.1); B=num(indexB,:); indexC=find(cailiao(:,1)==1); C=num(indexC,:); shengchanli=sum(reshape(sum(A),48,5))./0.6+sum(reshape(sum(B),48,5))./0.66+sum(reshape(sum(C),48,5))./0.72; plot(shengchanli)
模拟代码
%第四问模拟代码 %若出现某些错误,终止程序,可能是内存问题,重新运行即可 clc;clear; [num,txt,raw]=xlsread('问题1评分排名.xlsx'); data=xlsread('附件1 近5年402家供应商的相关数据.xlsx',2); index=1:402; num2=[index' num]; num3=sortrows(num2,7);%对排名进行升序 wushi=num3(1:50,:); %找出卖A的 indexA=find(wushi(:,2)==1.2); A=wushi(indexA,:); %找出卖B的 indexB=find(wushi(:,2)==1.1); B=wushi(indexB,:); %找出卖C的 indexC=find(wushi(:,2)==1); C=wushi(indexC,:); for i=1:16 MaxA(i)=max(data(A(i,1),:)); end for i=1:14 MaxB(i)=max(data(B(i,1),:)); end for i=1:20 MaxC(i)=max(data(C(i,1),:)); end F=[] Buy2=[]; R2=[]; Transport=[]; Shunshi2=[]; f=1000000000; count=1; X=1000%模拟次数 for Xunhuan=1:X x=rand(1,3); y=sum(x); r=x/y; r2=sort(r,2) TA=40625*0.6*r2(1); TB=40625*0.66*r2(2); TC=40625*0.72*r2(3); if TA<1 TA=1 end changkuA=0; changkuB=0; changkuC=0;%表示出库材料存量 buyA=zeros(16,24); buyB=zeros(14,24); buyC=zeros(20,24); %% %购买材料A for i=1:16 buyA(i,1)=min(round(TC*0.5),randi(round([MaxA(i)*0.5,MaxA(i)]))); end if sum(buyA(:,1))>=TA changkuA=sum(buyA(:,1))-TA; ChangkuA(1)=changkuA; for j=2:24%星期 for i=1:16%供应商 fanwei=min(round(TC*0.5),randi(round([MaxA(i)*0.5,MaxA(i)]))); if fanwei==0; fanwei=1 end if sum(buyA(:,j))<=TA||changkuA<=2*TA buyA(i,j)=randi(fanwei); if sum(buyA(:,j))>=TA changkuA=changkuA+sum(buyA(:,j))-TA; if changkuA>=2*TA continue end end end end if sum(buyA(:,j))<=TA changkuA=changkuA-(TA-sum(buyA(:,j))); end ChangkuA(j)=changkuA;%记录每周仓库的存储数量 end end %% %购买材料B for i=1:14 buyB(i,1)=min(round(TB*0.5),randi(round([MaxB(i)*0.5,MaxB(i)]))); end if sum(buyB(:,1))>=TB changkuB=sum(buyB(:,1))-TB; ChangkuB(1)=changkuB; for j=2:24%星期 for i=1:14%供应商 fanwei=min(round(TC*0.5),randi(round([MaxB(i)*0.5,MaxB(i)]))); if fanwei==0; fanwei=1; end if sum(buyB(:,j))<=TB||changkuB<=2*TB buyB(i,j)=randi(fanwei); if sum(buyB(:,j))>=TB changkuB=changkuB+sum(buyB(:,j))-TB; if changkuB>=2*TB continue end end end end if sum(buyB(:,j))<=TB changkuB=changkuB-(TB-sum(buyB(:,j))); end ChangkuB(j)=changkuB;%记录每周仓库的存储数量 end end %% %购买材料C for i=1:20 buyC(i,1)=min(round(TC*0.5),randi(round([MaxC(i)*0.5,MaxC(i)]))); end if sum(buyC(:,1))>=TC changkuC=sum(buyC(:,1))-TC; ChangkuC(1)=changkuC; for j=2:24%星期 for i=1:20%供应商 fanwei=min(round(TC*0.5),randi(round([MaxC(i)*0.5,MaxC(i)]))); if fanwei==0 fanwei=1 end if sum(buyC(:,j))<=TC||changkuC<=2*TC buyC(i,j)=randi(fanwei); if sum(buyC(:,j))>=TC changkuC=changkuC+sum(buyC(:,j))-TC; if changkuC>=2*TC continue end end end end if sum(buyC(:,j))<=TC changkuC=changkuC-(TC-sum(buyC(:,j))); end ChangkuC(j)=changkuC;%记录每周仓库的存储数量 end end Buy=zeros(50,24); Buy(A(:,7),:)=buyA; Buy(B(:,7),:)=buyB; Buy(C(:,7),:)=buyC; %数据合并 buy=zeros(402,24)*nan; buy(A(:,1),:)=buyA; buy(B(:,1),:)=buyB; buy(C(:,1),:)=buyC; %xlswrite('订购方案2',buy); %% %模拟转运损耗 fujian2=xlsread('附件2 近5年8家转运商的相关数据.xlsx','B2:IG9'); yunshu=zeros(5,24); for j=1:8%第j个转运商 hang=fujian2(j,:); %sunhao=unique(hang); %[m,n]=size(sunhao); for i=1:24 xunzhe=randi(240); yunshu(j,i)=hang(xunzhe); end end %% %实施转运 p=1:8;%运输排名 transport=zeros(50,24); for i=1:24%24周 a=1;%第a行 R=0;%运输量 yunshu2=[p' yunshu(:,i)]; yunshu2(find(yunshu2(:,2)==0),:)=[];%剔除不运输的转运商 [m,n]=size(yunshu2); yunshu3=sortrows(yunshu2,2);%进行降序 for j=1:50%50家供应商 indexT=yunshu3(a,1); if Buy(j,i)==0 continue end if R<=6000 R=R+Buy(j,i); transport(j,i)=indexT; else a=a+1; if a>m a=m; end transport(j,i)=yunshu3(a,1); R=0; R=R+Buy(j,i); end end end Transport2=ones(402,24)*nan; Transport2(wushi(:,1),:)=transport; %% %计算损失 Sunshi=zeros(50,24); for j=1:24%周 for i=1:50%供应商 if transport(i,j)==0 continue end Shunshi(i,j)=Buy(i,j)*yunshu(transport(i,j),j); end end Shunshi2=ones(402,24)*nan; Shunshi2(wushi(:,1),:)=Shunshi; if length(find(ChangkuA>=0))==24&&length(find(ChangkuB>=0))==24&&length(find(ChangkuC>=0))==24&&sum(sum(Buy))>702000 F(count)=sum(sum(buyA))*1.2+sum(sum(buyB))*1.1+sum(sum(buyC))+0.5*(sum(ChangkuA)+sum(ChangkuB)+sum(ChangkuC))+sum(sum(Buy))*0.5; count=count+1; if F(count-1)<f f=F(count-1); R2=r2; Buy2=buy; Transport3=Transport2; Shunshi3=Shunshi2; xlswrite('问题四订单',Buy2); xlswrite('问题四转运',Transport3); xlswrite('问题四损耗',Shunshi3); end end Xunhuan count end %结果画图 x=1:count-1; F2=sort(F,'descend') plot(x,F2,'-k*','linewidth',1) title('\fontname{宋体}问题四有效模拟图'); xlabel('\fontname{宋体}有效模拟次数');; ylabel('\fontname{宋体}花费成本'); set(gca,'FontName','Times New Roman','fontsize',10.5) box on grid on xlim([1,count-1]) figure plot(x,F,'-k*','linewidth',1) title('\fontname{宋体}问题四有效模拟图'); xlabel('\fontname{宋体}有效模拟次数');; ylabel('\fontname{宋体}花费成本'); set(gca,'FontName','Times New Roman','fontsize',10.5) box on grid on xlim([1,count-1])
其实还有一个模型检验的代码,不过太敷衍了,我就不放出来了
关于转运方案,改一改代码就能换成对应的表格了,我当时没注意它的表格格式,弄成了和订单一样的样子。。。
我这个用是蒙特卡洛模拟的思想
最后,欢迎大家和我交流