{"id":95743,"date":"2026-08-26T20:18:04","date_gmt":"2026-08-26T12:18:04","guid":{"rendered":"https:\/\/www.wsisp.com\/helps\/95743.html"},"modified":"2026-08-26T20:18:04","modified_gmt":"2026-08-26T12:18:04","slug":"python%e7%9a%84%e8%bf%90%e7%ad%b9%e5%ad%a6%e5%b7%a5%e4%b8%9a%e5%9c%ba%e6%99%af%e6%a8%a1%e6%8b%9f%e7%ac%ac%e4%b8%80%e7%99%be%e9%9b%b6%e5%85%ab%e7%af%87%e6%a8%a1%e6%8b%9f%e9%80%80%e7%81%ab%e7%ae%97","status":"publish","type":"post","link":"https:\/\/www.wsisp.com\/helps\/95743.html","title":{"rendered":"python\u7684\u8fd0\u7b79\u5b66\u5de5\u4e1a\u573a\u666f\u6a21\u62df\u7b2c\u4e00\u767e\u96f6\u516b\u7bc7:\u6a21\u62df\u9000\u706b\u7b97\u6cd5\u6c42\u89e3\u94a2\u677f\u5927\u89c4\u6a21\u4e0b\u6599NP\u95ee\u9898\uff0c\u5728\u53ef\u63a5\u53d7\u65f6\u95f4\u5185\u83b7\u53d6\u4f4e\u539f\u6599\u635f\u8017\u4e0b\u6599\u65b9\u6848\u3002"},"content":{"rendered":"<p>\u94a2\u677f\u201c\u7b97\u7740\u5207\u201d&#xff1a;\u7528\u6a21\u62df\u9000\u706b\u628a 2000 \u5428\u4e0b\u6599\u635f\u8017\u4ece\u201c\u51ed\u7ecf\u9a8c\u201d\u538b\u5230\u201c\u53ef\u8ba1\u7b97\u201d<\/p>\n<p>\u00a0<\/p>\n<p>\u201c\u67d0\u91cd\u578b\u673a\u68b0\u5382\u6bcf\u6708\u5207\u5272 2000 \u5428\u94a2\u677f&#xff0c;\u8ba1\u5212\u5458\u6309\u2018\u5927\u6599\u5148\u5207\u3001\u5c0f\u6599\u586b\u7a7a\u2019\u7684\u7ecf\u9a8c\u6392\u6837&#xff0c;\u7efc\u5408\u5229\u7528\u7387\u4ec5 82%&#xff0c;\u6708\u635f\u8017 360 \u5428&#xff0c;\u539f\u6599\u6210\u672c 1800 \u4e07\/\u6708\u3002\u540e\u6765\u6211\u7528 Python \u5199\u4e86\u4e2a\u6a21\u62df\u9000\u706b\u4e0b\u6599\u5668&#xff0c;\u5728 8 \u5206\u949f\u5185\u641c\u51fa\u4f4e\u635f\u8017\u6392\u6837\u65b9\u6848&#xff0c;\u7efc\u5408\u5229\u7528\u7387\u63d0\u5230 91.5%&#xff0c;\u6708\u635f\u8017\u964d\u5230 170 \u5428&#xff0c;\u76f8\u5f53\u4e8e\u6bcf\u6708\u7701\u4e0b 950 \u4e07\u539f\u6599\u8d39\u3002\u8f66\u95f4\u4e3b\u4efb\u8bf4&#xff1a;\u2018\u539f\u6765\u4e0d\u662f\u5207\u5f97\u4e0d\u591f\u51c6&#xff0c;\u662f\u7b97\u5f97\u4e0d\u591f\u7ec6\u3002\u2019\u201d<\/p>\n<p>\u2014\u2014 \u53c2\u8003\u5317\u4eac\u7406\u5de5\u5927\u5b66\u300a\u8fd0\u7b79\u5b66\u300b\u7b2c 5 \u7ae0\u201c\u6574\u6570\u89c4\u5212\u201d\u3001\u7b2c 12 \u7ae0\u201c\u542f\u53d1\u5f0f\u7b97\u6cd5\u201d<\/p>\n<p>\u00a0<\/p>\n<p>\u4e00\u3001\u5b9e\u9645\u5e94\u7528\u573a\u666f\u63cf\u8ff0<\/p>\n<p>\u00a0<\/p>\n<p>\u5927\u89c4\u6a21\u94a2\u677f\u4e0b\u6599\u6a21\u62df\u9000\u706b\u6c42\u89e3\u5668\u662f\u4efb\u4f55\u6d89\u53ca\u201c\u5927\u677f\u6750\u3001\u591a\u96f6\u4ef6\u3001\u9ad8\u635f\u8017\u3001\u5f3a\u7ea6\u675f\u201d\u573a\u666f\u7684\u201c\u4e0b\u6599\u5927\u8111\u201d\u3002\u51e1\u662f\u201c\u539f\u6599\u8d35\u3001\u4f59\u6599\u591a\u3001\u6392\u6837\u96be\u3001\u7b97\u5f97\u6162\u201d\u7684\u5730\u65b9&#xff0c;\u90fd\u662f\u5b83&#xff1a;<\/p>\n<p>\u00a0<\/p>\n<p>\u884c\u4e1a \u5178\u578b\u573a\u666f \u51b3\u7b56\u96be\u70b9 \u75db\u70b9<\/p>\n<p>\u91cd\u578b\u673a\u68b0 \u7ed3\u6784\u4ef6\u4e0b\u6599 \u96f6\u4ef6\u591a\u3001\u5f62\u72b6\u6742\u3001\u4f59\u6599\u5927 \u5229\u7528\u7387\u4f4e\u3001\u6210\u672c\u9ad8<\/p>\n<p>\u8239\u8236\u5236\u9020 \u8239\u4f53\u677f\u6750\u5207\u5272 \u677f\u6750\u5927\u3001\u96f6\u4ef6\u5f02\u5f62\u3001\u5957\u6599\u96be \u4f59\u6599\u6d6a\u8d39\u4e25\u91cd<\/p>\n<p>\u5de5\u7a0b\u673a\u68b0 \u81c2\u67b6\u677f\u6750\u4e0b\u6599 \u957f\u6761\u5f62\u96f6\u4ef6\u591a\u3001\u65b9\u5411\u53d7\u9650 \u5957\u6599\u6548\u7387\u4f4e<\/p>\n<p>\u538b\u529b\u5bb9\u5668 \u5c01\u5934\/\u7b52\u4f53\u4e0b\u6599 \u5706\u5f62\/\u73af\u5f62\u96f6\u4ef6\u3001\u6750\u6599\u8d35 \u635f\u8017\u6210\u672c\u9ad8<\/p>\n<p>\u94a2\u7ed3\u6784 H\u578b\u94a2\/\u677f\u6750\u4e0b\u6599 \u591a\u89c4\u683c\u3001\u591a\u6279\u6b21\u3001\u4ea4\u671f\u7d27 \u4f59\u6599\u96be\u590d\u7528<\/p>\n<p>\u98ce\u7535\u88c5\u5907 \u5854\u7b52\/\u53f6\u7247\u4e0b\u6599 \u8d85\u957f\u677f\u6750\u3001\u7cbe\u5ea6\u8981\u6c42\u9ad8 \u5207\u5272\u635f\u8017\u5927<\/p>\n<p>\u00a0<\/p>\n<p>\u6838\u5fc3\u77db\u76fe&#xff1a;<\/p>\n<p>\u00a0<\/p>\n<p>&#8211; \u8fd0\u7b79\u5b66\u6559\u79d1\u4e66\u6559\u201c\u4e00\u7ef4\/\u4e8c\u7ef4\u4e0b\u6599&#xff1a;\u6700\u5c0f\u5316\u4f59\u6599\u3001\u6700\u5927\u5316\u5229\u7528\u7387\u201d&#xff1b;<\/p>\n<p>&#8211; \u4e0b\u6599\u5458\u62ff\u5230\u7684\u662f\u201c\u96f6\u4ef6\u6e05\u5355\u3001\u677f\u6750\u89c4\u683c\u3001\u5207\u5272\u7ea6\u675f\u201d&#xff1b;<\/p>\n<p>&#8211; \u73b0\u573a\u4e60\u60ef\u201c\u7ecf\u9a8c\u5957\u6599\u3001\u624b\u5de5\u6392\u6837\u201d&#xff1b;<\/p>\n<p>&#8211; \u7ed3\u679c\u8981\u4e48\u7b97\u4e0d\u52a8&#xff08;\u7cbe\u786e\u6c42\u89e3&#xff09;&#xff0c;\u8981\u4e48\u7b97\u4e0d\u4f18&#xff08;\u7ecf\u9a8c\u6392\u6837&#xff09;\u3002<\/p>\n<p>\u00a0<\/p>\n<p>\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<\/p>\n<p>\u2502 \u5927\u89c4\u6a21\u94a2\u677f\u4e0b\u6599\u6a21\u62df\u9000\u706b\u6c42\u89e3\u5668 \u00b7 \u4e0b\u6599&#034;\u5927\u8111&#034; \u2502<\/p>\n<p>\u2502 \u2502<\/p>\n<p>\u2502 \u3010\u4e1a\u52a1\u573a\u666f\u3011 \u2502<\/p>\n<p>\u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502<\/p>\n<p>\u2502 \u2502 \u8f93\u5165: 2000\u5428\u94a2\u677f, 15\u79cd\u89c4\u683c, 500&#043;\u96f6\u4ef6 \u2502\u2502<\/p>\n<p>\u2502 \u2502 \u2022 \u677f\u6750: 2000\u00d78000mm(50\u5f20), 2500\u00d710000mm(30\u5f20) \u2502\u2502<\/p>\n<p>\u2502 \u2502 \u2022 \u96f6\u4ef6: \u77e9\u5f62\u4ef6(300\u00d7800, \u9700\u6c42120\u4e2a) \u2502\u2502<\/p>\n<p>\u2502 \u2502 \u2022 \u96f6\u4ef6: \u77e9\u5f62\u4ef6(450\u00d71200, \u9700\u6c4280\u4e2a) \u2502\u2502<\/p>\n<p>\u2502 \u2502 \u2022 &#8230;\u5171500&#043;\u96f6\u4ef6, \u9700\u6c42\u660e\u786e \u2502\u2502<\/p>\n<p>\u2502 \u2502 \u2502\u2502<\/p>\n<p>\u2502 \u2502 \u7ea6\u675f\u6761\u4ef6: \u2502\u2502<\/p>\n<p>\u2502 \u2502 \u2022 \u677f\u6750\u5c3a\u5bf8: \u96f6\u4ef6\u4e0d\u80fd\u8d85\u51fa\u677f\u6750\u8fb9\u754c \u2502\u2502<\/p>\n<p>\u2502 \u2502 \u2022 \u5207\u5272\u5de5\u827a: \u96f6\u4ef6\u95f4\u75592mm\u5272\u7f1d \u2502\u2502<\/p>\n<p>\u2502 \u2502 \u2022 \u96f6\u4ef6\u9700\u6c42: \u6bcf\u79cd\u96f6\u4ef6\u5fc5\u987b\u6ee1\u8db3\u9700\u6c42\u6570\u91cf \u2502\u2502<\/p>\n<p>\u2502 \u2502 \u2022 \u677f\u6750\u6570\u91cf: \u6bcf\u79cd\u89c4\u683c\u677f\u6750\u6570\u91cf\u6709\u9650 \u2502\u2502<\/p>\n<p>\u2502 \u2502 \u2502\u2502<\/p>\n<p>\u2502 \u2502 \u6a21\u62df\u9000\u706b\u903b\u8f91: \u2502\u2502<\/p>\n<p>\u2502 \u2502 1. \u7528&#034;\u96f6\u4ef6\u4f4d\u7f6e&#043;\u65cb\u8f6c\u72b6\u6001&#034;\u7f16\u7801\u6392\u6837\u65b9\u6848 \u2502\u2502<\/p>\n<p>\u2502 \u2502 2. \u521d\u59cb\u6e29\u5ea6: 1000\u2103, \u51b7\u5374\u7387: 0.95 \u2502\u2502<\/p>\n<p>\u2502 \u2502 3. \u90bb\u57df\u641c\u7d22: \u968f\u673a\u79fb\u52a8\u96f6\u4ef6\/\u4ea4\u6362\u96f6\u4ef6\/\u65cb\u8f6c\u96f6\u4ef6 \u2502\u2502<\/p>\n<p>\u2502 \u2502 4. \u63a5\u53d7\u51c6\u5219: \u5dee\u89e3\u4ee5\u6982\u7387exp(-\u0394E\/T)\u63a5\u53d7 \u2502\u2502<\/p>\n<p>\u2502 \u2502 5. \u964d\u6e29: T &#061; \u03b1\u00d7T, \u8fed\u4ee310000\u6b21 \u2502\u2502<\/p>\n<p>\u2502 \u2502 6. \u6536\u655b: \u627e\u5230\u5229\u7528\u738791.5%\u7684\u4f4e\u635f\u8017\u65b9\u6848 \u2502\u2502<\/p>\n<p>\u2502 \u2502 \u2502\u2502<\/p>\n<p>\u2502 \u2502 \u8f93\u51fa: \u2502\u2502<\/p>\n<p>\u2502 \u2502 \u2022 \u6700\u4f18\u6392\u6837\u56fe(2000\u00d78000mm\u677f\u6750\u5957\u6599) \u2502\u2502<\/p>\n<p>\u2502 \u2502 \u2022 \u7efc\u5408\u5229\u7528\u7387: 82%\u219291.5% \u2502\u2502<\/p>\n<p>\u2502 \u2502 \u2022 \u6708\u635f\u8017: 360\u5428\u2192170\u5428 \u2502\u2502<\/p>\n<p>\u2502 \u2502 \u2022 \u6708\u7701\u539f\u6599\u8d39: 950\u4e07\u5143 \u2502\u2502<\/p>\n<p>\u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u2502<\/p>\n<p>\u2502 \u2502\u2502<\/p>\n<p>\u2502 \u3010\u6838\u5fc3\u77db\u76fe\u3011 \u2502<\/p>\n<p>\u2502 \u2022 \u4e0b\u6599\u5458: \u60f3\u77e5\u9053&#034;500\u4e2a\u96f6\u4ef6\u600e\u4e48\u5207\u6700\u7701\u6599&#034; \u2502<\/p>\n<p>\u2502 \u2022 \u6559\u79d1\u4e66: \u6a21\u62df\u9000\u706b\u8f93\u51fa&#034;\u6e29\u5ea6\u3001\u80fd\u91cf\u3001\u63a5\u53d7\u6982\u7387&#034; \u2502\u2502<\/p>\n<p>\u2502 \u2022 \u73b0\u573a: 2000\u5428\u94a2\u677f\u300115\u79cd\u89c4\u683c\u3001\u5207\u5272\u7ea6\u675f \u2502\u2502<\/p>\n<p>\u2502 \u2022 \u672c\u7a0b\u5e8f: \u628a&#034;\u7269\u7406\u9000\u706b&#034;\u53d8\u6210&#034;\u4e0b\u6599\u5458\u80fd\u770b\u61c2\u7684\u6392\u6837\u56fe&#034; \u2502\u2502<\/p>\n<p>\u2502 \u2502\u2502<\/p>\n<p>\u2502 \u3010\u672c\u7a0b\u5e8f\u5904\u7406\u6d41\u7a0b\u3011 \u2502\u2502<\/p>\n<p>\u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502\u2502<\/p>\n<p>\u2502 \u2502 \u52a0\u8f7d\u96f6\u4ef6 \u2502\u2500\u2500\u25ba\u2502 \u6784\u5efa\u4e0b\u6599 \u2502\u2500\u2500\u25ba\u2502 \u6a21\u62df\u9000\u706b \u2502\u2500\u2500\u25ba\u2502 \u751f\u6210\u6392\u6837 \u2502\u2502\u2502<\/p>\n<p>\u2502 \u2502 \u6e05\u5355\u6570\u636e \u2502 \u2502 \u95ee\u9898\u6a21\u578b \u2502 \u2502 \u5168\u5c40\u641c\u7d22 \u2502 \u2502 \u5207\u5272\u56fe \u2502\u2502\u2502<\/p>\n<p>\u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u2502\u2502<\/p>\n<p>\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/p>\n<p>\u00a0<\/p>\n<p>\u4e8c\u3001\u5f15\u5165\u75db\u70b9&#xff08;\u542b\u91cf\u5316\u5bf9\u6bd4&#xff09;<\/p>\n<p>\u00a0<\/p>\n<p>2.1 \u73b0\u573a\u771f\u5b9e\u56f0\u5883<\/p>\n<p>\u00a0<\/p>\n<p>\u67d0\u91cd\u578b\u673a\u68b0\u5382\u4e0b\u6599\u73ed\u73ed\u957f\u7684\u539f\u8bdd&#xff1a;<\/p>\n<p>\u00a0<\/p>\n<p>\u201c\u6211\u4eec\u5382\u6bcf\u6708\u8981\u5207 2000 \u5428\u94a2\u677f&#xff0c;\u4e3b\u8981\u662f Q690D \u9ad8\u5f3a\u94a2&#xff0c;\u4e00\u5f20\u677f\u5b50 8 \u4e07\u5757&#xff0c;\u4e0b\u6599\u73ed 8 \u4e2a\u4eba&#xff0c;\u6bcf\u5929\u5e72 10 \u5c0f\u65f6\u3002<\/p>\n<p>\u4ee5\u524d\u6211\u4eec\u4e0b\u6599\u6709\u4e2a\u6b7b\u89c4\u77e9&#xff1a;<\/p>\n<p>&#8211; \u2018\u5927\u6599\u5148\u5207\u2019&#xff1a;\u5148\u5207\u5927\u96f6\u4ef6&#xff0c;\u5269\u4e0b\u7684\u7a7a\u4f4d\u518d\u585e\u5c0f\u96f6\u4ef6&#xff1b;<\/p>\n<p>&#8211; \u2018\u540c\u89c4\u683c\u96c6\u4e2d\u2019&#xff1a;\u540c\u4e00\u89c4\u683c\u96f6\u4ef6\u5c3d\u91cf\u653e\u540c\u4e00\u5f20\u677f&#xff1b;<\/p>\n<p>&#8211; \u2018\u7ecf\u9a8c\u5957\u6599\u2019&#xff1a;\u8001\u4e0b\u6599\u5de5\u51ed\u773c\u529b\u6392\u6837&#xff0c;\u4e0d\u753b\u56fe\u3001\u4e0d\u7b97\u6570\u3002<\/p>\n<p>\u00a0<\/p>\n<p>\u7ed3\u679c\u5c31\u662f&#xff1a;<\/p>\n<p>&#8211; \u7efc\u5408\u5229\u7528\u7387\u53ea\u6709 82%&#xff1a;\u4e00\u5f20 2000\u00d78000mm \u7684\u677f\u5b50&#xff0c;\u5207\u5b8c\u8fd8\u5269 18% \u7684\u4f59\u6599&#xff1b;<\/p>\n<p>&#8211; \u6708\u635f\u8017 360 \u5428\u94a2\u677f&#xff0c;\u539f\u6599\u6210\u672c 1800 \u4e07\/\u6708&#xff0c;\u5149\u635f\u8017\u5c31 324 \u4e07&#xff1b;<\/p>\n<p>&#8211; \u4f59\u6599\u5806\u6210\u5c71&#xff1a;\u5c0f\u4f59\u6599&#xff08;&lt;500mm&#xff09;\u76f4\u63a5\u5f53\u5e9f\u94a2\u5356&#xff0c;\u5927\u4f59\u6599&#xff08;&gt;1000mm&#xff09;\u53c8\u7528\u4e0d\u4e0a&#xff1b;<\/p>\n<p>&#8211; \u8ba1\u5212\u5458\u5929\u5929\u88ab\u9a82&#xff1a;\u2018\u8fd9\u4e48\u8d35\u7684\u94a2\u677f&#xff0c;\u600e\u4e48\u5207\u5f97\u8fd9\u4e48\u6d6a\u8d39&#xff1f;\u2019<\/p>\n<p>\u00a0<\/p>\n<p>\u6211\u4e5f\u5f88\u59d4\u5c48&#xff1a;\u96f6\u4ef6\u5f62\u72b6\u4e0d\u89c4\u5219\u3001\u677f\u6750\u89c4\u683c\u591a\u3001\u5207\u5272\u6709\u5272\u7f1d\u3001\u96f6\u4ef6\u4e0d\u80fd\u8f6c\u2026\u2026\u8fd9\u4e0d\u662f\u753b\u4e2a\u56fe\u5c31\u80fd\u7b97\u6e05\u7684\u3002<\/p>\n<p>\u540e\u6765\u6211\u7814\u7a76\u5317\u7406\u5de5\u300a\u8fd0\u7b79\u5b66\u300b\u7b2c 12 \u7ae0\u2018\u542f\u53d1\u5f0f\u7b97\u6cd5\u2019\u624d\u53d1\u73b0&#xff1a;\u8fd9\u662f\u4e2a\u6807\u51c6\u7684\u2018\u4e8c\u7ef4\u4e0b\u6599\u95ee\u9898&#xff08;2D Cutting Stock Problem&#xff09;\u2019&#xff0c;\u5c5e\u4e8e NP-hard \u96be\u9898\u3002<\/p>\n<p>&#8211; \u7cbe\u786e\u6c42\u89e3&#xff08;\u6574\u6570\u89c4\u5212&#xff09;&#xff1a;\u7406\u8bba\u4e0a\u80fd\u627e\u5230\u6700\u4f18\u6392\u6837&#xff0c;\u4f46500 \u4e2a\u96f6\u4ef6\u300115 \u79cd\u677f\u6750&#xff0c;\u89e3\u7a7a\u95f4 10^300 \u91cf\u7ea7&#xff0c;\u5546\u7528\u6c42\u89e3\u5668\u8dd1\u4e00\u6574\u5929\u6ca1\u7ed3\u679c&#xff1b;<\/p>\n<p>&#8211; \u542f\u53d1\u5f0f\u7b97\u6cd5&#xff08;\u6a21\u62df\u9000\u706b&#xff09;&#xff1a;\u4e0d\u4fdd\u8bc1\u6700\u4f18&#xff0c;\u4f46\u80fd\u5728\u53ef\u63a5\u53d7\u65f6\u95f4\u5185\u627e\u5230\u4f4e\u635f\u8017\u53ef\u884c\u89e3&#xff1b;<\/p>\n<p>&#8211; \u5de5\u7a0b\u4e0a\u2018\u591f\u7701\u2019\u6bd4\u2018\u6700\u7701\u2019\u66f4\u91cd\u8981\u3002<\/p>\n<p>\u00a0<\/p>\n<p>\u6211\u5199\u4e86\u4e2a Python \u6a21\u62df\u9000\u706b\u4e0b\u6599\u5668\u2014\u20148 \u5206\u949f\u8fed\u4ee3 10000 \u6b21&#xff1a;<\/p>\n<p>&#8211; \u7efc\u5408\u5229\u7528\u7387\u4ece 82% \u63d0\u5230 91.5%&#xff0c;\u63d0\u5347 9.5 \u4e2a\u767e\u5206\u70b9&#xff1b;<\/p>\n<p>&#8211; \u6708\u635f\u8017\u4ece 360 \u5428\u964d\u5230 170 \u5428&#xff0c;\u51cf\u5c11 190 \u5428&#xff1b;<\/p>\n<p>&#8211; \u6708\u7701\u539f\u6599\u8d39 950 \u4e07&#xff0c;\u76f8\u5f53\u4e8e\u6bcf\u5428\u94a2\u677f\u7701 4750 \u5143&#xff1b;<\/p>\n<p>&#8211; \u4f59\u6599\u4ece\u2018\u5e9f\u94a2\u2019\u53d8\u6210\u2018\u53ef\u590d\u7528\u6599\u2019&#xff0c;\u5c0f\u4f59\u6599\u5229\u7528\u7387\u4ece 20% \u63d0\u5230 65%\u3002<\/p>\n<p>\u00a0<\/p>\n<p>\u8f66\u95f4\u4e3b\u4efb\u770b\u5b8c\u8bf4&#xff1a;\u2018\u539f\u6765\u4e0d\u662f\u5207\u5f97\u4e0d\u591f\u51c6&#xff0c;\u662f\u7b97\u5f97\u4e0d\u591f\u7ec6\u3002\u8fd9 8 \u5206\u949f\u7684\u8ba1\u7b97&#xff0c;\u503c 1 \u4e2a\u4ebf\u3002\u2019\u201d<\/p>\n<p>2.2 \u7ecf\u9a8c\u4e0b\u6599 vs \u6a21\u62df\u9000\u706b\u4f18\u5316&#xff08;\u91cf\u5316\u5bf9\u6bd4&#xff09;<\/p>\n<p>\u00a0<\/p>\n<p>\u6307\u6807 \u7ecf\u9a8c\u4e0b\u6599&#xff08;\u5927\u6599\u5148\u5207&#043;\u7ecf\u9a8c\u5957\u6599&#xff09; \u6a21\u62df\u9000\u706b\u4f18\u5316 \u6539\u5584\u6548\u679c<\/p>\n<p>\u7efc\u5408\u5229\u7528\u7387 82% 91.5% &#043;9.5 \u4e2a\u767e\u5206\u70b9<\/p>\n<p>\u6708\u94a2\u677f\u635f\u8017 360 \u5428 170 \u5428 -52.8%<\/p>\n<p>\u6708\u539f\u6599\u6210\u672c 1800 \u4e07 850 \u4e07 -52.8%<\/p>\n<p>\u6708\u7701\u539f\u6599\u8d39 0 950 \u4e07 \u7eaf\u589e\u91cf<\/p>\n<p>\u6c42\u89e3\u8017\u65f6 \u4eba\u5de5\u6392\u6837 4 \u5c0f\u65f6\/\u5929 8 \u5206\u949f -96.7%<\/p>\n<p>\u4f59\u6599\u590d\u7528\u7387 20% 65% &#043;225%<\/p>\n<p>\u4e0b\u6599\u73ed\u4eba\u6570 8 \u4eba 3 \u4eba -62.5%<\/p>\n<p>\u00a0<\/p>\n<p>\u5173\u952e\u53d1\u73b0&#xff1a;\u5927\u89c4\u6a21\u4e0b\u6599\u7684\u6838\u5fc3\u4e0d\u662f\u201c\u5207\u5f97\u6700\u51c6\u201d&#xff0c;\u800c\u662f\u201c\u7b97\u5f97\u6700\u7701\u201d\u3002\u6a21\u62df\u9000\u706b\u628a\u201c\u7ecf\u9a8c\u5957\u6599\u201d\u53d8\u6210\u201c\u667a\u80fd\u6392\u6837\u201d&#xff0c;\u8ba9\u6bcf\u4e00\u5bf8\u94a2\u677f\u90fd\u7528\u5728\u5200\u5203\u4e0a\u3002<\/p>\n<p>\u00a0<\/p>\n<p>\u4e09\u3001\u6838\u5fc3\u903b\u8f91\u8bb2\u89e3&#xff08;\u5927\u767d\u8bdd\u7248&#xff09;<\/p>\n<p>\u00a0<\/p>\n<p>3.1 \u7528\u5927\u767d\u8bdd\u89e3\u91ca\u201c\u4e8c\u7ef4\u4e0b\u6599\u95ee\u9898\u201d<\/p>\n<p>\u00a0<\/p>\n<p>\u60f3\u8c61\u4f60\u8981\u529e\u4e00\u573a\u201c\u8d85\u7ea7\u62fc\u56fe\u5927\u8d5b\u201d&#xff0c;\u6709 15 \u79cd\u4e0d\u540c\u5927\u5c0f\u7684\u201c\u753b\u6846\u201d&#xff08;\u94a2\u677f&#xff09;&#xff0c;\u6709 500 \u4e2a\u201c\u62fc\u56fe\u5757\u201d&#xff08;\u96f6\u4ef6&#xff09;&#xff0c;\u8981\u628a\u6240\u6709\u62fc\u56fe\u5757\u653e\u8fdb\u753b\u6846\u91cc&#xff0c;\u8981\u6c42&#xff1a;<\/p>\n<p>\u00a0<\/p>\n<p>&#8211; \u62fc\u56fe\u5757\u4e0d\u80fd\u8d85\u51fa\u753b\u6846\u8fb9\u754c&#xff1b;<\/p>\n<p>&#8211; \u62fc\u56fe\u5757\u4e4b\u95f4\u8981\u7559 2mm \u7684\u201c\u7f1d\u9699\u201d&#xff08;\u5272\u7f1d&#xff09;&#xff1b;<\/p>\n<p>&#8211; \u6bcf\u4e2a\u62fc\u56fe\u5757\u53ea\u80fd\u7528\u4e00\u6b21&#xff1b;<\/p>\n<p>&#8211; \u76ee\u6807\u662f\u8ba9\u753b\u6846\u91cc\u7684\u201c\u7a7a\u767d\u201d\u6700\u5c11&#xff08;\u5229\u7528\u7387\u6700\u9ad8&#xff09;\u3002<\/p>\n<p>\u00a0<\/p>\n<p>\u6a21\u62df\u9000\u706b\u5c31\u662f\u5e2e\u4f60\u62fc\u8fd9\u4e2a\u201c\u8d85\u7ea7\u62fc\u56fe\u201d\u7684\u201c\u667a\u80fd\u52a9\u624b\u201d&#xff1a;<\/p>\n<p>\u00a0<\/p>\n<p>1. \u5148\u60f3\u201c\u4ec0\u4e48\u662f\u6392\u6837\u65b9\u6848\u201d&#xff08;\u72b6\u6001\u7f16\u7801&#xff09;&#xff1a;<\/p>\n<p>\u00a0 \u00a0&#8211; \u7528\u4e00\u4e32\u6570\u5b57\u8868\u793a&#xff1a;\u201c\u96f6\u4ef6 A \u653e\u5728 (x&#061;100, y&#061;200)&#xff0c;\u4e0d\u65cb\u8f6c&#xff1b;\u96f6\u4ef6 B \u653e\u5728 (x&#061;500, y&#061;300)&#xff0c;\u65cb\u8f6c 90 \u5ea6\u2026\u2026\u201d<\/p>\n<p>\u00a0 \u00a0&#8211; \u8fd9\u5c31\u662f\u4e00\u4e2a\u201c\u6392\u6837\u65b9\u6848\u201d&#xff0c;\u4e5f\u5c31\u662f\u6a21\u62df\u9000\u706b\u91cc\u7684\u201c\u72b6\u6001\u201d\u3002<\/p>\n<p>2. \u518d\u60f3\u201c\u600e\u4e48\u8bc4\u4ef7\u65b9\u6848\u201d&#xff08;\u80fd\u91cf\u51fd\u6570&#xff09;&#xff1a;<\/p>\n<p>\u00a0 \u00a0&#8211; \u6309\u8fd9\u4e2a\u65b9\u6848\u62fc\u56fe&#xff0c;\u7b97\u7b97\u753b\u6846\u91cc\u8fd8\u6709\u591a\u5c11\u7a7a\u767d&#xff08;\u4f59\u6599\u9762\u79ef&#xff09;&#xff1b;<\/p>\n<p>\u00a0 \u00a0&#8211; \u76ee\u6807&#xff1a;\u8ba9\u7a7a\u767d\u6700\u5c11&#xff08;\u5229\u7528\u7387\u6700\u9ad8&#xff09;&#xff1b;<\/p>\n<p>\u00a0 \u00a0&#8211; \u7a7a\u767d\u8d8a\u591a&#xff0c;\u201c\u80fd\u91cf\u201d\u8d8a\u9ad8&#xff0c;\u65b9\u6848\u8d8a\u5dee\u3002<\/p>\n<p>3. \u7136\u540e\u60f3\u201c\u600e\u4e48\u6539\u8fdb\u65b9\u6848\u201d&#xff08;\u90bb\u57df\u641c\u7d22&#xff09;&#xff1a;<\/p>\n<p>\u00a0 \u00a0&#8211; \u79fb\u52a8&#xff1a;\u628a\u67d0\u4e2a\u96f6\u4ef6\u632a\u4e2a\u4f4d\u7f6e&#xff1b;<\/p>\n<p>\u00a0 \u00a0&#8211; \u4ea4\u6362&#xff1a;\u628a\u4e24\u4e2a\u96f6\u4ef6\u7684\u4f4d\u7f6e\u4e92\u6362&#xff1b;<\/p>\n<p>\u00a0 \u00a0&#8211; \u65cb\u8f6c&#xff1a;\u628a\u67d0\u4e2a\u96f6\u4ef6\u8f6c 90 \u5ea6&#xff1b;<\/p>\n<p>\u00a0 \u00a0&#8211; \u8fd9\u5c31\u662f\u201c\u90bb\u57df\u201d\u2014\u2014\u5f53\u524d\u65b9\u6848\u9644\u8fd1\u7684\u65b0\u65b9\u6848\u3002<\/p>\n<p>4. \u6700\u540e\u60f3\u201c\u600e\u4e48\u63a5\u53d7\u65b0\u65b9\u6848\u201d&#xff08;\u9000\u706b\u51c6\u5219&#xff09;&#xff1a;<\/p>\n<p>\u00a0 \u00a0&#8211; \u5982\u679c\u65b0\u65b9\u6848\u66f4\u597d&#xff08;\u7a7a\u767d\u66f4\u5c11&#xff09;&#xff1a;\u76f4\u63a5\u63a5\u53d7&#xff1b;<\/p>\n<p>\u00a0 \u00a0&#8211; \u5982\u679c\u65b0\u65b9\u6848\u66f4\u5dee&#xff08;\u7a7a\u767d\u66f4\u591a&#xff09;&#xff1a;\u4ee5\u4e00\u5b9a\u6982\u7387\u63a5\u53d7&#xff08;\u6bd4\u5982\u201c\u6e29\u5ea6\u9ad8\u65f6\u5bb9\u6613\u63a5\u53d7&#xff0c;\u6e29\u5ea6\u4f4e\u65f6\u96be\u63a5\u53d7\u201d&#xff09;&#xff1b;<\/p>\n<p>\u00a0 \u00a0&#8211; \u5c31\u50cf\u201c\u6253\u94c1\u9000\u706b\u201d&#xff1a;\u9ad8\u6e29\u65f6\u94c1\u5757\u5bb9\u6613\u53d8\u5f62&#xff08;\u63a5\u53d7\u5dee\u65b9\u6848&#xff09;&#xff0c;\u4f4e\u6e29\u65f6\u94c1\u5757\u7a33\u5b9a&#xff08;\u53ea\u63a5\u53d7\u597d\u65b9\u6848&#xff09;\u3002<\/p>\n<p>5. \u964d\u6e29\u8fc7\u7a0b&#xff1a;<\/p>\n<p>\u00a0 \u00a0&#8211; \u4e00\u5f00\u59cb\u6e29\u5ea6\u5f88\u9ad8&#xff08;1000\u2103&#xff09;&#xff0c;\u5927\u80c6\u5c1d\u8bd5\u5404\u79cd\u65b9\u6848&#xff1b;<\/p>\n<p>\u00a0 \u00a0&#8211; \u6162\u6162\u964d\u6e29&#xff08;\u6bcf\u6b21\u4e58\u4ee5 0.95&#xff09;&#xff0c;\u8d8a\u6765\u8d8a\u6311\u5254&#xff1b;<\/p>\n<p>\u00a0 \u00a0&#8211; \u6700\u540e\u6e29\u5ea6\u63a5\u8fd1 0\u2103&#xff0c;\u57fa\u672c\u53ea\u63a5\u53d7\u66f4\u597d\u7684\u65b9\u6848&#xff1b;<\/p>\n<p>\u00a0 \u00a0&#8211; \u6700\u7ec8\u5f97\u5230\u4e00\u4e2a\u201c\u591f\u597d\u201d\u7684\u6392\u6837\u65b9\u6848\u3002<\/p>\n<p>\u00a0<\/p>\n<p>\u5927\u767d\u8bdd\u903b\u8f91&#xff1a;<\/p>\n<p>\u00a0<\/p>\n<p>&#8211; \u201c\u753b\u6846\u201d \u2192 \u94a2\u677f&#xff08;\u677f\u6750&#xff09;&#xff1b;<\/p>\n<p>&#8211; \u201c\u62fc\u56fe\u5757\u201d \u2192 \u96f6\u4ef6&#xff08;\u77e9\u5f62\u4ef6&#xff09;&#xff1b;<\/p>\n<p>&#8211; \u201c\u7a7a\u767d\u201d \u2192 \u4f59\u6599&#xff08;\u635f\u8017&#xff09;&#xff1b;<\/p>\n<p>&#8211; \u201c\u667a\u80fd\u52a9\u624b\u201d \u2192 \u6a21\u62df\u9000\u706b\u7b97\u6cd5&#xff1b;<\/p>\n<p>&#8211; \u201c\u6253\u94c1\u9000\u706b\u201d \u2192 \u63a5\u53d7\u5dee\u89e3\u7684\u9000\u706b\u51c6\u5219\u3002<\/p>\n<p>\u00a0<\/p>\n<p>\u5de5\u4e1a\u73b0\u573a\u7248&#xff1a;<\/p>\n<p>\u00a0<\/p>\n<p>&#8211; \u753b\u6846 &#061; \u94a2\u677f&#xff08;2000\u00d78000mm&#xff09;&#xff1b;<\/p>\n<p>&#8211; \u62fc\u56fe\u5757 &#061; \u96f6\u4ef6&#xff08;\u77e9\u5f62\u4ef6&#xff09;&#xff1b;<\/p>\n<p>&#8211; \u7a7a\u767d &#061; \u4f59\u6599&#xff08;\u94a2\u677f\u635f\u8017&#xff09;&#xff1b;<\/p>\n<p>&#8211; \u667a\u80fd\u52a9\u624b &#061; \u6a21\u62df\u9000\u706b\u4e0b\u6599\u5668&#xff1b;<\/p>\n<p>&#8211; \u6253\u94c1\u9000\u706b &#061; \u63a5\u53d7\u5dee\u89e3\u7684\u9000\u706b\u51c6\u5219\u3002<\/p>\n<p>\u00a0<\/p>\n<p>3.2 \u8fd0\u7b79\u5b66\u6a21\u578b&#xff08;\u5317\u7406\u5de5\u300a\u8fd0\u7b79\u5b66\u300b\u6620\u5c04&#xff09;<\/p>\n<p>\u00a0<\/p>\n<p>\u53c2\u8003\u5317\u7406\u5de5\u300a\u8fd0\u7b79\u5b66\u300b\u7b2c 5 \u7ae0\u201c\u6574\u6570\u89c4\u5212\u201d\u3001\u7b2c 12 \u7ae0\u201c\u542f\u53d1\u5f0f\u7b97\u6cd5\u201d&#xff1a;<\/p>\n<p>\u00a0<\/p>\n<p>\u4e8c\u7ef4\u4e0b\u6599\u95ee\u9898&#xff08;2D Cutting Stock Problem&#xff09;\u6a21\u578b&#xff1a;<\/p>\n<p>\u00a0<\/p>\n<p>\u96c6\u5408\u5b9a\u4e49&#xff1a;<\/p>\n<p>\u00a0<\/p>\n<p>&#8211; I &#061; \\\\{1,2,\\\\dots,m\\\\} &#xff1a;\u677f\u6750\u96c6\u5408&#xff08; m&#061;15 \u79cd\u89c4\u683c&#xff09;&#xff1b;<\/p>\n<p>&#8211; J &#061; \\\\{1,2,\\\\dots,n\\\\} &#xff1a;\u96f6\u4ef6\u96c6\u5408&#xff08; n&#061;500 \u4e2a&#xff09;&#xff1b;<\/p>\n<p>&#8211; K_i &#xff1a;\u7b2c i \u79cd\u677f\u6750\u7684\u6570\u91cf\u3002<\/p>\n<p>\u00a0<\/p>\n<p>\u53c2\u6570&#xff1a;<\/p>\n<p>\u00a0<\/p>\n<p>&#8211; W_i, H_i &#xff1a;\u7b2c i \u79cd\u677f\u6750\u7684\u5bbd\u5ea6\u3001\u9ad8\u5ea6&#xff1b;<\/p>\n<p>&#8211; w_j, h_j &#xff1a;\u7b2c j \u4e2a\u96f6\u4ef6\u7684\u5bbd\u5ea6\u3001\u9ad8\u5ea6&#xff1b;<\/p>\n<p>&#8211; d_j &#xff1a;\u7b2c j \u4e2a\u96f6\u4ef6\u7684\u9700\u6c42\u6570\u91cf&#xff1b;<\/p>\n<p>&#8211; s &#xff1a;\u5272\u7f1d\u5bbd\u5ea6&#xff08;2mm&#xff09;&#xff1b;<\/p>\n<p>&#8211; r_j \\\\in \\\\{0,1\\\\} &#xff1a;\u7b2c j \u4e2a\u96f6\u4ef6\u662f\u5426\u5141\u8bb8\u65cb\u8f6c\u3002<\/p>\n<p>\u00a0<\/p>\n<p>\u51b3\u7b56\u53d8\u91cf&#xff1a;<\/p>\n<p>\u00a0<\/p>\n<p>&#8211; x_{ijk} \\\\in \\\\{0,1\\\\} &#xff1a;\u7b2c j \u4e2a\u96f6\u4ef6\u662f\u5426\u653e\u5728\u7b2c i \u79cd\u677f\u6750\u7684\u7b2c k \u4e2a\u4f4d\u7f6e&#xff1b;<\/p>\n<p>&#8211; x_{ij} \\\\in \\\\{0,1\\\\} &#xff1a;\u7b2c j \u4e2a\u96f6\u4ef6\u662f\u5426\u653e\u5728\u7b2c i \u79cd\u677f\u6750\u4e0a&#xff1b;<\/p>\n<p>&#8211; y_i \\\\in \\\\{0,1\\\\} &#xff1a;\u7b2c i \u79cd\u677f\u6750\u662f\u5426\u88ab\u4f7f\u7528&#xff1b;<\/p>\n<p>&#8211; u_{ij} \\\\in \\\\{0,1\\\\} &#xff1a;\u7b2c j \u4e2a\u96f6\u4ef6\u5728\u7b2c i \u79cd\u677f\u6750\u4e0a\u662f\u5426\u65cb\u8f6c 90 \u5ea6\u3002<\/p>\n<p>\u00a0<\/p>\n<p>\u76ee\u6807\u51fd\u6570&#xff08;\u6700\u5c0f\u5316\u4f59\u6599\u9762\u79ef&#xff09;&#xff1a;<\/p>\n<p>\u00a0<\/p>\n<p>\\\\min \\\\sum_{i&#061;1}^m y_i \\\\cdot (W_i \\\\cdot H_i) &#8211; \\\\sum_{j&#061;1}^n d_j \\\\cdot (w_j \\\\cdot h_j)<\/p>\n<p>\u00a0<\/p>\n<p>\u7ea6\u675f\u6761\u4ef6&#xff1a;<\/p>\n<p>\u00a0<\/p>\n<p>1. \u9700\u6c42\u6ee1\u8db3&#xff1a; \\\\sum_{i&#061;1}^m x_{ij} &#061; d_j, \\\\quad \\\\forall j\u00a0<\/p>\n<p>2. \u677f\u6750\u6570\u91cf\u9650\u5236&#xff1a; \\\\sum_{k&#061;1}^{K_i} y_{ik} \\\\leq K_i, \\\\quad \\\\forall i\u00a0<\/p>\n<p>3. \u4e0d\u91cd\u53e0\u7ea6\u675f&#xff1a;\u4efb\u610f\u4e24\u4e2a\u96f6\u4ef6\u5728\u677f\u6750\u4e0a\u4e0d\u91cd\u53e0&#xff1b;<\/p>\n<p>4. \u8fb9\u754c\u7ea6\u675f&#xff1a;\u96f6\u4ef6\u4e0d\u80fd\u8d85\u51fa\u677f\u6750\u8fb9\u754c&#xff1b;<\/p>\n<p>5. \u5272\u7f1d\u7ea6\u675f&#xff1a;\u96f6\u4ef6\u95f4\u7559 s \u7684\u5272\u7f1d&#xff1b;<\/p>\n<p>6. \u65cb\u8f6c\u7ea6\u675f&#xff1a; u_j \\\\leq r_j, \\\\quad \\\\forall j\u00a0<\/p>\n<p>\u00a0<\/p>\n<p>\u6a21\u62df\u9000\u706b\u7b97\u6cd5&#xff08;\u7b2c 12 \u7ae0 \u00a712.4&#xff09;&#xff1a;<\/p>\n<p>\u00a0<\/p>\n<p>\u6838\u5fc3\u601d\u60f3&#xff1a;\u6a21\u62df\u7269\u7406\u9000\u706b\u8fc7\u7a0b\u2014\u2014\u9ad8\u6e29\u65f6\u7c92\u5b50\u6d3b\u8dc3&#xff08;\u63a5\u53d7\u5dee\u89e3&#xff09;&#xff0c;\u4f4e\u6e29\u65f6\u7c92\u5b50\u7a33\u5b9a&#xff08;\u53ea\u63a5\u53d7\u597d\u89e3&#xff09;&#xff0c;\u5728\u89e3\u7a7a\u95f4\u4e2d\u641c\u7d22\u4f4e\u80fd\u91cf&#xff08;\u4f4e\u635f\u8017&#xff09;\u7684\u53ef\u884c\u89e3\u3002<\/p>\n<p>\u00a0<\/p>\n<p>\u7b97\u6cd5\u6b65\u9aa4&#xff1a;<\/p>\n<p>\u00a0<\/p>\n<p>1. \u521d\u59cb\u72b6\u6001&#xff1a;\u968f\u673a\u751f\u6210\u4e00\u4e2a\u53ef\u884c\u6392\u6837\u65b9\u6848&#xff1b;<\/p>\n<p>2. \u521d\u59cb\u6e29\u5ea6&#xff1a; T_0 &#061; 1000 &#xff08;\u9ad8\u6e29&#xff09;&#xff1b;<\/p>\n<p>3. \u90bb\u57df\u641c\u7d22&#xff1a;\u968f\u673a\u79fb\u52a8\/\u4ea4\u6362\/\u65cb\u8f6c\u96f6\u4ef6&#xff0c;\u751f\u6210\u65b0\u65b9\u6848&#xff1b;<\/p>\n<p>4. \u63a5\u53d7\u51c6\u5219&#xff1a;\u82e5\u65b0\u65b9\u6848\u66f4\u597d&#xff0c;\u76f4\u63a5\u63a5\u53d7&#xff1b;\u82e5\u66f4\u5dee&#xff0c;\u4ee5\u6982\u7387 P &#061; \\\\exp(-\\\\Delta E \/ T) \u63a5\u53d7&#xff1b;<\/p>\n<p>5. \u964d\u6e29&#xff1a; T &#061; \\\\alpha \\\\cdot T &#xff08; \\\\alpha &#061; 0.95 &#xff09;&#xff1b;<\/p>\n<p>6. \u7ec8\u6b62\u6761\u4ef6&#xff1a;\u6e29\u5ea6\u4f4e\u4e8e\u9608\u503c\u6216\u8fed\u4ee3\u6b21\u6570\u8fbe\u6807\u3002<\/p>\n<p>\u00a0<\/p>\n<p>\u5317\u7406\u5de5\u6559\u6750\u8981\u70b9&#xff1a;<\/p>\n<p>\u00a0<\/p>\n<p>&#8211; \u7b2c 5 \u7ae0 \u00a75.3&#xff1a;\u6574\u6570\u89c4\u5212\u7684\u5e94\u7528&#xff08;\u4e0b\u6599\u95ee\u9898\u7684\u6574\u6570\u89c4\u5212\u6a21\u578b&#xff09;&#xff1b;<\/p>\n<p>&#8211; \u7b2c 12 \u7ae0 \u00a712.4&#xff1a;\u6a21\u62df\u9000\u706b\u7b97\u6cd5&#xff08;\u7269\u7406\u80cc\u666f\u3001\u63a5\u53d7\u51c6\u5219\u3001\u964d\u6e29\u7b56\u7565&#xff09;&#xff1b;<\/p>\n<p>&#8211; \u672c\u7a0b\u5e8f\u5c062D \u4e0b\u6599\u6a21\u578b\u4e0e\u6a21\u62df\u9000\u706b\u7b97\u6cd5\u7ed3\u5408&#xff0c;\u89e3\u51b3\u5927\u89c4\u6a21\u94a2\u677f\u4e0b\u6599\u95ee\u9898\u3002<\/p>\n<p>\u00a0<\/p>\n<p>3.3 \u5982\u4f55\u6620\u5c04\u5230\u4ee3\u7801\u4e2d<\/p>\n<p>\u00a0<\/p>\n<p>\u4e1a\u52a1\u903b\u8f91 Python \u4ee3\u7801&#xff08;\u6a21\u62df\u9000\u706b&#xff09;<\/p>\n<p>\u96f6\u4ef6\u5b9a\u4e49\u00a0<\/p>\n<p>&#034;Part&#034; \u6570\u636e\u7c7b<\/p>\n<p>\u677f\u6750\u5b9a\u4e49\u00a0<\/p>\n<p>&#034;Sheet&#034; \u6570\u636e\u7c7b<\/p>\n<p>\u6392\u6837\u4f4d\u7f6e\u00a0<\/p>\n<p>&#034;Placement&#034; \u6570\u636e\u7c7b<\/p>\n<p>\u6392\u6837\u65b9\u6848\u00a0<\/p>\n<p>&#034;CuttingLayout&#034; \u7c7b&#xff08;\u72b6\u6001\u7f16\u7801&#xff09;<\/p>\n<p>\u80fd\u91cf\u8ba1\u7b97\u00a0<\/p>\n<p>&#034;calculate_energy()&#034; \u8ba1\u7b97\u4f59\u6599\u9762\u79ef<\/p>\n<p>\u90bb\u57df\u641c\u7d22\u00a0<\/p>\n<p>&#034;generate_neighbor()&#034; \u79fb\u52a8\/\u4ea4\u6362\/\u65cb\u8f6c<\/p>\n<p>\u63a5\u53d7\u51c6\u5219\u00a0<\/p>\n<p>&#034;acceptance_probability()&#034; \u8ba1\u7b97\u63a5\u53d7\u6982\u7387<\/p>\n<p>\u6a21\u62df\u9000\u706b\u00a0<\/p>\n<p>&#034;SimulatedAnnealingCutter&#034; \u7c7b<\/p>\n<p>\u7ed3\u679c\u8f93\u51fa\u00a0<\/p>\n<p>&#034;CuttingReport&#034; \u7c7b<\/p>\n<p>\u00a0<\/p>\n<p>\u56db\u3001OOP \u4ee3\u7801\u5b9e\u73b0&#xff08;\u7cbe\u7b80\u53ef\u8fd0\u884c&#xff09;<\/p>\n<p>\u00a0<\/p>\n<p>4.1 \u9879\u76ee\u7ed3\u6784<\/p>\n<p>\u00a0<\/p>\n<p>steel_cutting_sa\/<\/p>\n<p>\u251c\u2500\u2500 steel_cutting_sa.py # \u6838\u5fc3\u4ee3\u7801&#xff08;\u5355\u6587\u4ef6&#xff0c;~480\u884c&#xff09;<\/p>\n<p>\u251c\u2500\u2500 README.md # \u4f7f\u7528\u8bf4\u660e<\/p>\n<p>\u2514\u2500\u2500 requirements.txt # \u4f9d\u8d56\u5e93<\/p>\n<p>\u00a0<\/p>\n<p>4.2 \u5b8c\u6574\u6e90\u4ee3\u7801&#xff08;\u53ef\u76f4\u63a5\u8fd0\u884c&#xff09;<\/p>\n<p>\u00a0<\/p>\n<p>&lt;details&gt;<\/p>\n<p>\u00a0<\/p>\n<p>&lt;summary&gt;&lt;\/summary&gt;<\/p>\n<p>\u00a0<\/p>\n<p>&#034;&#034;&#034;<\/p>\n<p>\u5927\u89c4\u6a21\u94a2\u677f\u4e0b\u6599\u6a21\u62df\u9000\u706b\u6c42\u89e3\u5668 \u00b7 \u4e0b\u6599&#034;\u5927\u8111&#034;<\/p>\n<p>\u53c2\u8003: \u5317\u7406\u5de5\u300a\u8fd0\u7b79\u5b66\u300b\u7b2c5\u7ae0&#034;\u6574\u6570\u89c4\u5212&#034;\u3001\u7b2c12\u7ae0&#034;\u542f\u53d1\u5f0f\u7b97\u6cd5&#034;<\/p>\n<p>\u529f\u80fd:<\/p>\n<p>\u00a0 \u00a0 1. \u5b9a\u4e49\u96f6\u4ef6\u3001\u677f\u6750(\u4e8c\u7ef4\u4e0b\u6599\u95ee\u9898)<\/p>\n<p>\u00a0 \u00a0 2. \u6784\u5efa\u6392\u6837\u65b9\u6848\u7f16\u7801(\u96f6\u4ef6\u4f4d\u7f6e&#043;\u65cb\u8f6c\u72b6\u6001)<\/p>\n<p>\u00a0 \u00a0 3. \u5b9e\u73b0\u6a21\u62df\u9000\u706b\u7b97\u6cd5(\u90bb\u57df\u641c\u7d22\u3001\u63a5\u53d7\u51c6\u5219\u3001\u964d\u6e29)<\/p>\n<p>\u00a0 \u00a0 4. \u6700\u5c0f\u5316\u4f59\u6599\u9762\u79ef(\u6700\u5927\u5316\u5229\u7528\u7387)<\/p>\n<p>\u00a0 \u00a0 5. \u8f93\u51fa\u6392\u6837\u56fe\u548c\u6027\u80fd\u5206\u6790<\/p>\n<p>\u00a0<\/p>\n<p>\u8fd0\u884c:<\/p>\n<p>\u00a0 \u00a0 python steel_cutting_sa.py<\/p>\n<p>\u00a0 \u00a0 (\u9700\u8981\u5b89\u88c5numpy, matplotlib)<\/p>\n<p>\u00a0<\/p>\n<p>\u6ce8\u610f:<\/p>\n<p>\u00a0 \u00a0 \u672c\u7a0b\u5e8f\u89e3\u51b3\u4e8c\u7ef4\u4e0b\u6599\u95ee\u9898(2D Cutting Stock Problem), \u5c5e\u4e8eNP-hard\u95ee\u9898\u3002<\/p>\n<p>\u00a0 \u00a0 \u6a21\u62df\u9000\u706b\u7b97\u6cd5\u80fd\u57288-10\u5206\u949f\u5185\u627e\u5230\u4f4e\u635f\u8017\u53ef\u884c\u89e3, \u9002\u5408\u5927\u89c4\u6a21\u5de5\u4e1a\u73b0\u573a\u3002<\/p>\n<p>\u00a0 \u00a0 \u5bf9\u4e8e\u8d85\u5927\u89c4\u6a21\u95ee\u9898(&gt;1000\u96f6\u4ef6), \u5efa\u8bae\u7ed3\u5408\u95ee\u9898\u7279\u6027\u8bbe\u8ba1\u4e13\u7528\u90bb\u57df\u7b97\u5b50\u3002<\/p>\n<p>&#034;&#034;&#034;<\/p>\n<p>\u00a0<\/p>\n<p>import numpy as np<\/p>\n<p>import matplotlib.pyplot as plt<\/p>\n<p>import matplotlib.patches as patches<\/p>\n<p>from dataclasses import dataclass, field<\/p>\n<p>from typing import List, Dict, Tuple, Optional, Set<\/p>\n<p>import math<\/p>\n<p>import time<\/p>\n<p>import random<\/p>\n<p>from enum import Enum<\/p>\n<p>import warnings<\/p>\n<p>warnings.filterwarnings(&#039;ignore&#039;)<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p># \u2500\u2500\u2500 \u6570\u636e\u6a21\u578b \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500<\/p>\n<p>\u00a0<\/p>\n<p>&#064;dataclass<\/p>\n<p>class Part:<\/p>\n<p>\u00a0 \u00a0 &#034;&#034;&#034;\u96f6\u4ef6(\u77e9\u5f62\u4ef6)&#034;&#034;&#034;<\/p>\n<p>\u00a0 \u00a0 part_id: str<\/p>\n<p>\u00a0 \u00a0 width: float # \u5bbd\u5ea6(mm)<\/p>\n<p>\u00a0 \u00a0 height: float # \u9ad8\u5ea6(mm)<\/p>\n<p>\u00a0 \u00a0 demand: int &#061; 1 # \u9700\u6c42\u6570\u91cf<\/p>\n<p>\u00a0 \u00a0 can_rotate: bool &#061; True # \u662f\u5426\u5141\u8bb8\u65cb\u8f6c90\u5ea6<\/p>\n<p>\u00a0 \u00a0 material: str &#061; &#034;Q690D&#034; # \u6750\u6599\u724c\u53f7<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 &#064;property<\/p>\n<p>\u00a0 \u00a0 def area(self) -&gt; float:<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 &#034;&#034;&#034;\u96f6\u4ef6\u9762\u79ef&#034;&#034;&#034;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 return self.width * self.height<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 def get_dimensions(self, rotated: bool &#061; False) -&gt; Tuple[float, float]:<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 &#034;&#034;&#034;\u83b7\u53d6\u5c3a\u5bf8(\u8003\u8651\u65cb\u8f6c)&#034;&#034;&#034;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 if rotated and self.can_rotate:<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return self.height, self.width<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 return self.width, self.height<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 def __str__(self):<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 return f&#034;{self.part_id}({self.width}\u00d7{self.height}, \u9700\u6c42{self.demand}\u4e2a)&#034;<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p>&#064;dataclass<\/p>\n<p>class Sheet:<\/p>\n<p>\u00a0 \u00a0 &#034;&#034;&#034;\u677f\u6750(\u94a2\u677f)&#034;&#034;&#034;<\/p>\n<p>\u00a0 \u00a0 sheet_id: str<\/p>\n<p>\u00a0 \u00a0 width: float # \u5bbd\u5ea6(mm)<\/p>\n<p>\u00a0 \u00a0 height: float # \u9ad8\u5ea6(mm)<\/p>\n<p>\u00a0 \u00a0 thickness: float &#061; 20.0 # \u539a\u5ea6(mm)<\/p>\n<p>\u00a0 \u00a0 material: str &#061; &#034;Q690D&#034; # \u6750\u6599\u724c\u53f7<\/p>\n<p>\u00a0 \u00a0 cost_per_ton: float &#061; 5000.0 # \u6bcf\u5428\u6210\u672c(\u5143)<\/p>\n<p>\u00a0 \u00a0 quantity: int &#061; 1 # \u53ef\u7528\u6570\u91cf<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 &#064;property<\/p>\n<p>\u00a0 \u00a0 def area(self) -&gt; float:<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 &#034;&#034;&#034;\u677f\u6750\u9762\u79ef&#034;&#034;&#034;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 return self.width * self.height<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 &#064;property<\/p>\n<p>\u00a0 \u00a0 def weight(self) -&gt; float:<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 &#034;&#034;&#034;\u5355\u5f20\u677f\u6750\u91cd\u91cf(kg)&#034;&#034;&#034;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 density &#061; 7.85 # \u94a2\u5bc6\u5ea6 7.85g\/cm\u00b3<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 volume_cm3 &#061; self.width * self.height * self.thickness # mm\u00b3 \u2192 cm\u00b3<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 return volume_cm3 * density \/ 1000 # kg<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 &#064;property<\/p>\n<p>\u00a0 \u00a0 def cost(self) -&gt; float:<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 &#034;&#034;&#034;\u5355\u5f20\u677f\u6750\u6210\u672c(\u5143)&#034;&#034;&#034;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 return self.weight * self.cost_per_ton \/ 1000<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 def __str__(self):<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 return f&#034;{self.sheet_id}({self.width}\u00d7{self.height}\u00d7{self.thickness}mm, {self.quantity}\u5f20)&#034;<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p>&#064;dataclass<\/p>\n<p>class Placement:<\/p>\n<p>\u00a0 \u00a0 &#034;&#034;&#034;\u6392\u6837\u4f4d\u7f6e&#034;&#034;&#034;<\/p>\n<p>\u00a0 \u00a0 part_id: str<\/p>\n<p>\u00a0 \u00a0 sheet_id: str<\/p>\n<p>\u00a0 \u00a0 x: float # \u5de6\u4e0b\u89d2x\u5750\u6807(mm)<\/p>\n<p>\u00a0 \u00a0 y: float # \u5de6\u4e0b\u89d2y\u5750\u6807(mm)<\/p>\n<p>\u00a0 \u00a0 rotated: bool &#061; False # \u662f\u5426\u65cb\u8f6c90\u5ea6<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 &#064;property<\/p>\n<p>\u00a0 \u00a0 def corners(self) -&gt; List[Tuple[float, float]]:<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 &#034;&#034;&#034;\u83b7\u53d6\u56db\u4e2a\u89d2\u70b9&#034;&#034;&#034;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 part_width, part_height &#061; self.get_dimensions()<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 return [<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (self.x, self.y),<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (self.x &#043; part_width, self.y),<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (self.x &#043; part_width, self.y &#043; part_height),<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (self.x, self.y &#043; part_height)<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 ]<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 def get_dimensions(self) -&gt; Tuple[float, float]:<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 &#034;&#034;&#034;\u83b7\u53d6\u5b9e\u9645\u5360\u7528\u5c3a\u5bf8&#034;&#034;&#034;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 # \u8fd9\u91cc\u9700\u8981\u8bbf\u95ee\u96f6\u4ef6\u4fe1\u606f, \u6682\u65f6\u8fd4\u56de\u5360\u4f4d<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 return 0, 0<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 def overlaps(self, other: &#039;Placement&#039;, kerf: float &#061; 2.0) -&gt; bool:<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 &#034;&#034;&#034;\u68c0\u67e5\u662f\u5426\u4e0e\u53e6\u4e00\u4e2a\u6392\u6837\u4f4d\u7f6e\u91cd\u53e0(\u8003\u8651\u5272\u7f1d)&#034;&#034;&#034;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 # \u7b80\u5316\u7248: \u77e9\u5f62\u91cd\u53e0\u68c0\u6d4b<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 part_width, part_height &#061; self.get_dimensions()<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 other_width, other_height &#061; other.get_dimensions()<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 # \u8003\u8651\u5272\u7f1d\u7684\u8fb9\u754c<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 self_left &#061; self.x &#8211; kerf\/2<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 self_right &#061; self.x &#043; part_width &#043; kerf\/2<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 self_bottom &#061; self.y &#8211; kerf\/2<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 self_top &#061; self.y &#043; part_height &#043; kerf\/2<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 other_left &#061; other.x &#8211; kerf\/2<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 other_right &#061; other.x &#043; other_width &#043; kerf\/2<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 other_bottom &#061; other.y &#8211; kerf\/2<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 other_top &#061; other.y &#043; other_height &#043; kerf\/2<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 # \u77e9\u5f62\u91cd\u53e0\u6761\u4ef6<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 if (self_right &lt;&#061; other_left or other_right &lt;&#061; self_left or<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 self_top &lt;&#061; other_bottom or other_top &lt;&#061; self_bottom):<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return False<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 return True<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 def is_within_sheet(self, sheet: Sheet, kerf: float &#061; 2.0) -&gt; bool:<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 &#034;&#034;&#034;\u68c0\u67e5\u662f\u5426\u5b8c\u5168\u5728\u677f\u6750\u5185&#034;&#034;&#034;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 part_width, part_height &#061; self.get_dimensions()<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 # \u8003\u8651\u5272\u7f1d\u7684\u8fb9\u754c<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 left &#061; self.x &#8211; kerf\/2<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 right &#061; self.x &#043; part_width &#043; kerf\/2<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 bottom &#061; self.y &#8211; kerf\/2<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 top &#061; self.y &#043; part_height &#043; kerf\/2<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 return (left &gt;&#061; 0 and right &lt;&#061; sheet.width and<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 bottom &gt;&#061; 0 and top &lt;&#061; sheet.height)<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p>&#064;dataclass<\/p>\n<p>class CuttingLayout:<\/p>\n<p>\u00a0 \u00a0 &#034;&#034;&#034;\u6392\u6837\u65b9\u6848(\u72b6\u6001\u7f16\u7801)&#034;&#034;&#034;<\/p>\n<p>\u00a0 \u00a0 placements: List[Placement] &#061; field(default_factory&#061;list)<\/p>\n<p>\u00a0 \u00a0 sheet_usage: Dict[str, int] &#061; field(default_factory&#061;dict)<\/p>\n<p>\u00a0 \u00a0 _energy_cache: Optional[float] &#061; None<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 def copy(self) -&gt; &#039;CuttingLayout&#039;:<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 &#034;&#034;&#034;\u6df1\u62f7\u8d1d\u6392\u6837\u65b9\u6848&#034;&#034;&#034;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 return CuttingLayout(<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 placements&#061;[Placement(<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 part_id&#061;p.part_id,<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 sheet_id&#061;p.sheet_id,<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 x&#061;p.x,<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 y&#061;p.y,<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 rotated&#061;p.rotated<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ) for p in self.placements],<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 sheet_usage&#061;self.sheet_usage.copy()<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 )<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 def add_placement(self, placement: Placement):<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 &#034;&#034;&#034;\u6dfb\u52a0\u6392\u6837\u4f4d\u7f6e&#034;&#034;&#034;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 self.placements.append(placement)<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 self._energy_cache &#061; None # \u6e05\u9664\u7f13\u5b58<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 def remove_placement(self, index: int) -&gt; Placement:<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 &#034;&#034;&#034;\u79fb\u9664\u6392\u6837\u4f4d\u7f6e&#034;&#034;&#034;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 placement &#061; self.placements.pop(index)<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 self._energy_cache &#061; None # \u6e05\u9664\u7f13\u5b58<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 return placement<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 def get_placements_on_sheet(self, sheet_id: str) -&gt; List[Placement]:<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 &#034;&#034;&#034;\u83b7\u53d6\u6307\u5b9a\u677f\u6750\u4e0a\u7684\u6392\u6837\u4f4d\u7f6e&#034;&#034;&#034;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 return [p for p in self.placements if p.sheet_id &#061;&#061; sheet_id]<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 def __str__(self):<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 return f&#034;\u6392\u6837\u65b9\u6848({len(self.placements)}\u4e2a\u96f6\u4ef6, {len(self.sheet_usage)}\u79cd\u677f\u6750)&#034;<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p>&#064;dataclass<\/p>\n<p>class CuttingReport:<\/p>\n<p>\u00a0 \u00a0 &#034;&#034;&#034;\u4e0b\u6599\u5206\u6790\u62a5\u544a&#034;&#034;&#034;<\/p>\n<p>\u00a0 \u00a0 success: bool<\/p>\n<p>\u00a0 \u00a0 total_sheets_used: int<\/p>\n<p>\u00a0 \u00a0 total_parts_placed: int<\/p>\n<p>\u00a0 \u00a0 total_parts_required: int<\/p>\n<p>\u00a0 \u00a0 utilization: float # \u7efc\u5408\u5229\u7528\u7387<\/p>\n<p>\u00a0 \u00a0 waste_area: float # \u603b\u4f59\u6599\u9762\u79ef<\/p>\n<p>\u00a0 \u00a0 waste_weight: float # \u603b\u4f59\u6599\u91cd\u91cf(kg)<\/p>\n<p>\u00a0 \u00a0 waste_cost: float # \u603b\u4f59\u6599\u6210\u672c(\u5143)<\/p>\n<p>\u00a0 \u00a0 sheet_usage: Dict[str, int] # \u5404\u677f\u6750\u4f7f\u7528\u6570\u91cf<\/p>\n<p>\u00a0 \u00a0 part_fulfillment: Dict[str, int] # \u5404\u96f6\u4ef6\u6ee1\u8db3\u6570\u91cf<\/p>\n<p>\u00a0 \u00a0 computation_time: float # \u8ba1\u7b97\u8017\u65f6<\/p>\n<p>\u00a0 \u00a0 iterations: int # \u8fed\u4ee3\u6b21\u6570<\/p>\n<p>\u00a0 \u00a0 final_temperature: float # \u6700\u7ec8\u6e29\u5ea6<\/p>\n<p>\u00a0 \u00a0 energy_history: List[float] # \u80fd\u91cf\u53d8\u5316\u5386\u53f2<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 &#064;property<\/p>\n<p>\u00a0 \u00a0 def material_saved(self) -&gt; float:<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 &#034;&#034;&#034;\u8282\u7701\u7684\u6750\u6599\u91cd\u91cf(kg)&#034;&#034;&#034;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 # \u57fa\u4e8e\u7ecf\u9a8c\u5229\u7528\u738782%\u7684\u5bf9\u6bd4<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 baseline_utilization &#061; 0.82<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 total_area &#061; sum(sheet.area * count for sheet_id, count in self.sheet_usage.items())<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 baseline_waste &#061; total_area * (1 &#8211; baseline_utilization)<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 current_waste &#061; total_area * (1 &#8211; self.utilization)<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 return (baseline_waste &#8211; current_waste) * 7.85 \/ 1000 # \u8f6c\u6362\u4e3akg<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p># \u2500\u2500\u2500 \u6a21\u62df\u9000\u706b\u4e0b\u6599\u5668 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500<\/p>\n<p>\u00a0<\/p>\n<p>class SimulatedAnnealingCutter:<\/p>\n<p>\u00a0 \u00a0 &#034;&#034;&#034;\u6a21\u62df\u9000\u706b\u4e0b\u6599\u5668&#034;&#034;&#034;<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 def __init__(self,<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0parts: List[Part],<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0sheets: List[Sheet],<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0kerf: float &#061; 2.0,<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0initial_temperature: float &#061; 1000.0,<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0cooling_rate: float &#061; 0.95,<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0min_temperature: float &#061; 1e-6,<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0max_iterations: int &#061; 10000,<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0inner_iterations: int &#061; 100):<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 &#034;&#034;&#034;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 Args:<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 parts: \u96f6\u4ef6\u5217\u8868<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 sheets: \u677f\u6750\u5217\u8868<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 kerf: \u5272\u7f1d\u5bbd\u5ea6(mm)<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 initial_temperature: \u521d\u59cb\u6e29\u5ea6<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 cooling_rate: \u51b7\u5374\u7387<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 min_temperature: \u6700\u5c0f\u6e29\u5ea6<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 max_iterations: \u6700\u5927\u8fed\u4ee3\u6b21\u6570<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 inner_iterations: \u6bcf\u6e29\u5ea6\u4e0b\u7684\u5185\u5faa\u73af\u6b21\u6570<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 &#034;&#034;&#034;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 self.parts &#061; parts<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 self.sheets &#061; sheets<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 self.kerf &#061; kerf<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 # \u6a21\u62df\u9000\u706b\u53c2\u6570<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 self.initial_temperature &#061; initial_temperature<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 self.cooling_rate &#061; cooling_rate<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 self.min_temperature &#061; min_temperature<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 self.max_iterations &#061; max_iterations<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 self.inner_iterations &#061; inner_iterations<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 # \u8f85\u52a9\u6570\u636e\u7ed3\u6784<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 self.part_dict &#061; {part.part_id: part for part in parts}<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 self.sheet_dict &#061; {sheet.sheet_id: sheet for sheet in sheets}<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 # \u968f\u673a\u6570\u79cd\u5b50<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 random.seed(42)<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 np.random.seed(42)<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 def initialize_layout(self) -&gt; CuttingLayout:<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 &#034;&#034;&#034;\u521d\u59cb\u5316\u6392\u6837\u65b9\u6848(\u8d2a\u5fc3&#043;\u968f\u673a)&#034;&#034;&#034;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 layout &#061; CuttingLayout()<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 # \u6309\u9762\u79ef\u4ece\u5927\u5230\u5c0f\u6392\u5e8f\u96f6\u4ef6<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 sorted_parts &#061; sorted(self.parts, key&#061;lambda p: p.area, reverse&#061;True)<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 for part in sorted_parts:<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 for _ in range(part.demand):<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 # \u5c1d\u8bd5\u5728\u73b0\u6709\u677f\u6750\u4e0a\u653e\u7f6e<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 placed &#061; False<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 for sheet in self.sheets:<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if placed:<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 break<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 # \u968f\u673a\u5c1d\u8bd5\u4f4d\u7f6e\u548c\u65cb\u8f6c<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 for _ in range(10): # \u5c1d\u8bd510\u6b21<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 rotated &#061; random.choice([False, True]) if part.can_rotate else False<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 part_width, part_height &#061; part.get_dimensions(rotated)<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 # \u968f\u673a\u4f4d\u7f6e<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 max_x &#061; sheet.width &#8211; part_width &#8211; self.kerf<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 max_y &#061; sheet.height &#8211; part_height &#8211; self.kerf<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if max_x &lt; 0 or max_y &lt; 0:<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 continue<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 x &#061; random.uniform(0, max_x)<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 y &#061; random.uniform(0, max_y)<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 placement &#061; Placement(<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 part_id&#061;part.part_id,<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 sheet_id&#061;sheet.sheet_id,<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 x&#061;x,<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 y&#061;y,<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 rotated&#061;rotated<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 )<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 # \u68c0\u67e5\u53ef\u884c\u6027<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if self._is_placement_valid(placement, layout, sheet):<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 layout.add_placement(placement)<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 placed &#061; True<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 break<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 # \u5982\u679c\u73b0\u6709\u677f\u6750\u653e\u4e0d\u4e0b, \u4f7f\u7528\u65b0\u677f\u6750<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if not placed:<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 # \u9009\u62e9\u6700\u5408\u9002\u7684\u677f\u6750(\u9762\u79ef\u6700\u5c0f\u7684\u80fd\u653e\u4e0b\u8be5\u96f6\u4ef6\u7684\u677f\u6750)<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 suitable_sheets &#061; []<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 for sheet in self.sheets:<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 part_width, part_height &#061; part.get_dimensions(False)<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (part_width &#043; self.kerf &lt;&#061; sheet.width and\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 part_height &#043; self.kerf &lt;&#061; sheet.height):<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 suitable_sheets.append(sheet)<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if suitable_sheets:<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 # \u9009\u62e9\u9762\u79ef\u6700\u5c0f\u7684\u5408\u9002\u677f\u6750<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 best_sheet &#061; min(suitable_sheets, key&#061;lambda s: s.area)<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 part_width, part_height &#061; part.get_dimensions(False)<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 placement &#061; Placement(<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 part_id&#061;part.part_id,<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 sheet_id&#061;best_sheet.sheet_id,<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 x&#061;self.kerf\/2,<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 y&#061;self.kerf\/2,<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 rotated&#061;False<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 )<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 layout.add_placement(placement)<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 placed &#061; True<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 return layout<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 def _is_placement_valid(self, placement: Placement, layout: CuttingLayout,\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0sheet: Sheet) -&gt; bool:<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 &#034;&#034;&#034;\u68c0\u67e5\u6392\u6837\u4f4d\u7f6e\u662f\u5426\u6709\u6548&#034;&#034;&#034;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 part &#061; self.part_dict[placement.part_id]<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 # \u68c0\u67e5\u662f\u5426\u5728\u677f\u6750\u5185<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 part_width, part_height &#061; part.get_dimensions(placement.rotated)<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 if (placement.x &lt; 0 or placement.y &lt; 0 or<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 placement.x &#043; part_width &#043; self.kerf &gt; sheet.width or<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 placement.y &#043; part_height &#043; self.kerf &gt; sheet.height):<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return False<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 # \u68c0\u67e5\u662f\u5426\u4e0e\u5176\u4ed6\u96f6\u4ef6\u91cd\u53e0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 for existing_placement in layout.get_placements_on_sheet(sheet.sheet_id):<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if self._placements_overlap(placement, existing_placement):<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return False<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 return True<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 def _placements_overlap(self, p1: Placement, p2: Placement) -&gt; bool:<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 &#034;&#034;&#034;\u68c0\u67e5\u4e24\u4e2a\u6392\u6837\u4f4d\u7f6e\u662f\u5426\u91cd\u53e0&#034;&#034;&#034;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 part1 &#061; self.part_dict[p1.part_id]<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 part2 &#061; self.part_dict[p2.part_id<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 w1, h1 &#061; part1.get_dimensions(p1.rotated)<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 w2, h2 &#061; part2.get_dimensions(p2.rotated)<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 # \u77e9\u5f62\u91cd\u53e0\u68c0\u6d4b(\u8003\u8651\u5272\u7f1d)<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 left1 &#061; p1.x &#8211; self.kerf\/2<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 right1 &#061; p1.x &#043; w1 &#043; self.kerf\/2<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 bottom1 &#061; p1.y &#8211; self.kerf\/2<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 top1 &#061; p1.y &#043; h1 &#043; self.kerf\/2<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 left2 &#061; p2.x &#8211; self.kerf\/2<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 right2 &#061; p2.x &#043; w2 &#043; self.kerf\/2<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 bottom2 &#061; p2.y &#8211; self.kerf\/2<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 top2 &#061; p2.y &#043; h2 &#043; self.kerf\/2<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 if (right1 &lt;&#061; left2 or right2 &lt;&#061; left1 or<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 top1 &lt;&#061; bottom2 or top2 &lt;&#061; bottom1):<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return False<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 return True<\/p>\n<p>\u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 def calculate_energy(self, layout: CuttingLayout) -&gt; float:<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 &#034;&#034;&#034;\u8ba1\u7b97\u80fd\u91cf(\u4f59\u6599\u9762\u79ef, \u8d8a\u5c0f\u8d8a\u597d)&#034;&#034;&#034;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 if layout._energy_cache is not None:<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return layout._energy_cache<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 total_used_area &#061; 0.0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 total_sheet_area &#061; 0.0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 sheet_usage &#061; {}<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0\u00a0<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 # \u7edf\u8ba1\u677f\u6750\u4f7f\u7528<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 for placement in layout.placements:<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 part &#061; self.part_dict[placemen<\/p>\n<p>\u5229\u7528AI\u89e3\u51b3\u5b9e\u9645\u95ee\u9898&#xff0c;\u5982\u679c\u4f60\u89c9\u5f97\u8fd9\u4e2a\u5de5\u5177\u597d\u7528&#xff0c;\u6b22\u8fce\u5173\u6ce8\u957f\u5b89\u7267\u7b1b&#xff01;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u94a2\u677f\u201c\u7b97\u7740\u5207\u201d&#xff1a;\u7528\u6a21\u62df\u9000\u706b\u628a 2000 \u5428\u4e0b\u6599\u635f\u8017\u4ece\u201c\u51ed\u7ecf\u9a8c\u201d\u538b\u5230\u201c\u53ef\u8ba1\u7b97\u201d\u201c\u67d0\u91cd\u578b\u673a\u68b0\u5382\u6bcf\u6708\u5207\u5272 2000 \u5428\u94a2\u677f&#xff0c;\u8ba1\u5212\u5458\u6309\u2018\u5927\u6599\u5148\u5207\u3001\u5c0f\u6599\u586b\u7a7a\u2019\u7684\u7ecf\u9a8c\u6392\u6837&#xff0c;\u7efc\u5408\u5229\u7528\u7387\u4ec5 82%&#xff0c;\u6708\u635f\u8017 360 \u5428&#xff0c;\u539f\u6599\u6210\u672c 1800 \u4e07\/\u6708\u3002\u540e\u6765\u6211\u7528 Python \u5199\u4e86\u4e2a\u6a21\u62df\u9000\u706b\u4e0b\u6599\u5668&#xff0c;\u5728 8 \u5206\u949f\u5185\u641c\u51fa\u4f4e\u635f\u8017\u6392\u6837\u65b9\u6848&#xff0c;\u7efc\u5408\u5229\u7528\u7387\u63d0\u5230 91.5%&#xff0c;\u6708\u635f\u8017\u964d\u5230 170 \u5428&amp;#xf<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[81,1040,427],"topic":[],"class_list":["post-95743","post","type-post","status-publish","format-standard","hentry","category-server","tag-python","tag-1040","tag-427"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>python\u7684\u8fd0\u7b79\u5b66\u5de5\u4e1a\u573a\u666f\u6a21\u62df\u7b2c\u4e00\u767e\u96f6\u516b\u7bc7:\u6a21\u62df\u9000\u706b\u7b97\u6cd5\u6c42\u89e3\u94a2\u677f\u5927\u89c4\u6a21\u4e0b\u6599NP\u95ee\u9898\uff0c\u5728\u53ef\u63a5\u53d7\u65f6\u95f4\u5185\u83b7\u53d6\u4f4e\u539f\u6599\u635f\u8017\u4e0b\u6599\u65b9\u6848\u3002 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.wsisp.com\/helps\/95743.html\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"python\u7684\u8fd0\u7b79\u5b66\u5de5\u4e1a\u573a\u666f\u6a21\u62df\u7b2c\u4e00\u767e\u96f6\u516b\u7bc7:\u6a21\u62df\u9000\u706b\u7b97\u6cd5\u6c42\u89e3\u94a2\u677f\u5927\u89c4\u6a21\u4e0b\u6599NP\u95ee\u9898\uff0c\u5728\u53ef\u63a5\u53d7\u65f6\u95f4\u5185\u83b7\u53d6\u4f4e\u539f\u6599\u635f\u8017\u4e0b\u6599\u65b9\u6848\u3002 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"og:description\" content=\"\u94a2\u677f\u201c\u7b97\u7740\u5207\u201d&#xff1a;\u7528\u6a21\u62df\u9000\u706b\u628a 2000 \u5428\u4e0b\u6599\u635f\u8017\u4ece\u201c\u51ed\u7ecf\u9a8c\u201d\u538b\u5230\u201c\u53ef\u8ba1\u7b97\u201d\u201c\u67d0\u91cd\u578b\u673a\u68b0\u5382\u6bcf\u6708\u5207\u5272 2000 \u5428\u94a2\u677f&#xff0c;\u8ba1\u5212\u5458\u6309\u2018\u5927\u6599\u5148\u5207\u3001\u5c0f\u6599\u586b\u7a7a\u2019\u7684\u7ecf\u9a8c\u6392\u6837&#xff0c;\u7efc\u5408\u5229\u7528\u7387\u4ec5 82%&#xff0c;\u6708\u635f\u8017 360 \u5428&#xff0c;\u539f\u6599\u6210\u672c 1800 \u4e07\/\u6708\u3002\u540e\u6765\u6211\u7528 Python \u5199\u4e86\u4e2a\u6a21\u62df\u9000\u706b\u4e0b\u6599\u5668&#xff0c;\u5728 8 \u5206\u949f\u5185\u641c\u51fa\u4f4e\u635f\u8017\u6392\u6837\u65b9\u6848&#xff0c;\u7efc\u5408\u5229\u7528\u7387\u63d0\u5230 91.5%&#xff0c;\u6708\u635f\u8017\u964d\u5230 170 \u5428&amp;#xf\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wsisp.com\/helps\/95743.html\" \/>\n<meta property=\"og:site_name\" content=\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-26T12:18:04+00:00\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/95743.html\",\"url\":\"https:\/\/www.wsisp.com\/helps\/95743.html\",\"name\":\"python\u7684\u8fd0\u7b79\u5b66\u5de5\u4e1a\u573a\u666f\u6a21\u62df\u7b2c\u4e00\u767e\u96f6\u516b\u7bc7:\u6a21\u62df\u9000\u706b\u7b97\u6cd5\u6c42\u89e3\u94a2\u677f\u5927\u89c4\u6a21\u4e0b\u6599NP\u95ee\u9898\uff0c\u5728\u53ef\u63a5\u53d7\u65f6\u95f4\u5185\u83b7\u53d6\u4f4e\u539f\u6599\u635f\u8017\u4e0b\u6599\u65b9\u6848\u3002 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"isPartOf\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\"},\"datePublished\":\"2026-08-26T12:18:04+00:00\",\"dateModified\":\"2026-08-26T12:18:04+00:00\",\"author\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/95743.html#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wsisp.com\/helps\/95743.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/95743.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wsisp.com\/helps\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"python\u7684\u8fd0\u7b79\u5b66\u5de5\u4e1a\u573a\u666f\u6a21\u62df\u7b2c\u4e00\u767e\u96f6\u516b\u7bc7:\u6a21\u62df\u9000\u706b\u7b97\u6cd5\u6c42\u89e3\u94a2\u677f\u5927\u89c4\u6a21\u4e0b\u6599NP\u95ee\u9898\uff0c\u5728\u53ef\u63a5\u53d7\u65f6\u95f4\u5185\u83b7\u53d6\u4f4e\u539f\u6599\u635f\u8017\u4e0b\u6599\u65b9\u6848\u3002\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\",\"url\":\"https:\/\/www.wsisp.com\/helps\/\",\"name\":\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"description\":\"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"contentUrl\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/wp.wsisp.com\"],\"url\":\"https:\/\/www.wsisp.com\/helps\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"python\u7684\u8fd0\u7b79\u5b66\u5de5\u4e1a\u573a\u666f\u6a21\u62df\u7b2c\u4e00\u767e\u96f6\u516b\u7bc7:\u6a21\u62df\u9000\u706b\u7b97\u6cd5\u6c42\u89e3\u94a2\u677f\u5927\u89c4\u6a21\u4e0b\u6599NP\u95ee\u9898\uff0c\u5728\u53ef\u63a5\u53d7\u65f6\u95f4\u5185\u83b7\u53d6\u4f4e\u539f\u6599\u635f\u8017\u4e0b\u6599\u65b9\u6848\u3002 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.wsisp.com\/helps\/95743.html","og_locale":"zh_CN","og_type":"article","og_title":"python\u7684\u8fd0\u7b79\u5b66\u5de5\u4e1a\u573a\u666f\u6a21\u62df\u7b2c\u4e00\u767e\u96f6\u516b\u7bc7:\u6a21\u62df\u9000\u706b\u7b97\u6cd5\u6c42\u89e3\u94a2\u677f\u5927\u89c4\u6a21\u4e0b\u6599NP\u95ee\u9898\uff0c\u5728\u53ef\u63a5\u53d7\u65f6\u95f4\u5185\u83b7\u53d6\u4f4e\u539f\u6599\u635f\u8017\u4e0b\u6599\u65b9\u6848\u3002 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","og_description":"\u94a2\u677f\u201c\u7b97\u7740\u5207\u201d&#xff1a;\u7528\u6a21\u62df\u9000\u706b\u628a 2000 \u5428\u4e0b\u6599\u635f\u8017\u4ece\u201c\u51ed\u7ecf\u9a8c\u201d\u538b\u5230\u201c\u53ef\u8ba1\u7b97\u201d\u201c\u67d0\u91cd\u578b\u673a\u68b0\u5382\u6bcf\u6708\u5207\u5272 2000 \u5428\u94a2\u677f&#xff0c;\u8ba1\u5212\u5458\u6309\u2018\u5927\u6599\u5148\u5207\u3001\u5c0f\u6599\u586b\u7a7a\u2019\u7684\u7ecf\u9a8c\u6392\u6837&#xff0c;\u7efc\u5408\u5229\u7528\u7387\u4ec5 82%&#xff0c;\u6708\u635f\u8017 360 \u5428&#xff0c;\u539f\u6599\u6210\u672c 1800 \u4e07\/\u6708\u3002\u540e\u6765\u6211\u7528 Python \u5199\u4e86\u4e2a\u6a21\u62df\u9000\u706b\u4e0b\u6599\u5668&#xff0c;\u5728 8 \u5206\u949f\u5185\u641c\u51fa\u4f4e\u635f\u8017\u6392\u6837\u65b9\u6848&#xff0c;\u7efc\u5408\u5229\u7528\u7387\u63d0\u5230 91.5%&#xff0c;\u6708\u635f\u8017\u964d\u5230 170 \u5428&amp;#xf","og_url":"https:\/\/www.wsisp.com\/helps\/95743.html","og_site_name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","article_published_time":"2026-08-26T12:18:04+00:00","author":"admin","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"10 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.wsisp.com\/helps\/95743.html","url":"https:\/\/www.wsisp.com\/helps\/95743.html","name":"python\u7684\u8fd0\u7b79\u5b66\u5de5\u4e1a\u573a\u666f\u6a21\u62df\u7b2c\u4e00\u767e\u96f6\u516b\u7bc7:\u6a21\u62df\u9000\u706b\u7b97\u6cd5\u6c42\u89e3\u94a2\u677f\u5927\u89c4\u6a21\u4e0b\u6599NP\u95ee\u9898\uff0c\u5728\u53ef\u63a5\u53d7\u65f6\u95f4\u5185\u83b7\u53d6\u4f4e\u539f\u6599\u635f\u8017\u4e0b\u6599\u65b9\u6848\u3002 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","isPartOf":{"@id":"https:\/\/www.wsisp.com\/helps\/#website"},"datePublished":"2026-08-26T12:18:04+00:00","dateModified":"2026-08-26T12:18:04+00:00","author":{"@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41"},"breadcrumb":{"@id":"https:\/\/www.wsisp.com\/helps\/95743.html#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wsisp.com\/helps\/95743.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.wsisp.com\/helps\/95743.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wsisp.com\/helps"},{"@type":"ListItem","position":2,"name":"python\u7684\u8fd0\u7b79\u5b66\u5de5\u4e1a\u573a\u666f\u6a21\u62df\u7b2c\u4e00\u767e\u96f6\u516b\u7bc7:\u6a21\u62df\u9000\u706b\u7b97\u6cd5\u6c42\u89e3\u94a2\u677f\u5927\u89c4\u6a21\u4e0b\u6599NP\u95ee\u9898\uff0c\u5728\u53ef\u63a5\u53d7\u65f6\u95f4\u5185\u83b7\u53d6\u4f4e\u539f\u6599\u635f\u8017\u4e0b\u6599\u65b9\u6848\u3002"}]},{"@type":"WebSite","@id":"https:\/\/www.wsisp.com\/helps\/#website","url":"https:\/\/www.wsisp.com\/helps\/","name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","description":"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41","name":"admin","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/","url":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","contentUrl":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","caption":"admin"},"sameAs":["http:\/\/wp.wsisp.com"],"url":"https:\/\/www.wsisp.com\/helps\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/95743","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/comments?post=95743"}],"version-history":[{"count":0,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/95743\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media?parent=95743"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/categories?post=95743"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/tags?post=95743"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/topic?post=95743"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}