From 0a524c2c347e28dd815096a48a661d4b9c43355f Mon Sep 17 00:00:00 2001 From: heshunme Date: Sat, 7 Sep 2024 15:45:25 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=9B=E5=B1=95=EF=BC=9A=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E4=BA=86=E7=9B=AE=E6=A0=87=E5=87=BD=E6=95=B0=20=E8=BF=98?= =?UTF-8?q?=E5=B7=AE=E7=BA=A6=E6=9D=9F=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problem1.ipynb | 1099 +++++++++++++++++++----------------------------- 1 file changed, 427 insertions(+), 672 deletions(-) diff --git a/problem1.ipynb b/problem1.ipynb index 64e15ce..dcfe3fa 100644 --- a/problem1.ipynb +++ b/problem1.ipynb @@ -3,21 +3,21 @@ { "metadata": { "ExecuteTime": { - "end_time": "2024-09-07T06:13:13.583685Z", - "start_time": "2024-09-07T06:13:13.566683Z" + "end_time": "2024-09-07T07:39:53.146868Z", + "start_time": "2024-09-07T07:39:52.630439Z" } }, "cell_type": "code", "source": "import pandas as pd", "id": "e19ec4ae5347c678", "outputs": [], - "execution_count": 50 + "execution_count": 1 }, { "metadata": { "ExecuteTime": { - "end_time": "2024-09-07T06:13:13.973538Z", - "start_time": "2024-09-07T06:13:13.906Z" + "end_time": "2024-09-07T07:39:53.919487Z", + "start_time": "2024-09-07T07:39:53.146868Z" } }, "cell_type": "code", @@ -27,13 +27,13 @@ ], "id": "initial_id", "outputs": [], - "execution_count": 51 + "execution_count": 2 }, { "metadata": { "ExecuteTime": { - "end_time": "2024-09-07T06:18:12.104380Z", - "start_time": "2024-09-07T06:18:12.095949Z" + "end_time": "2024-09-07T07:39:53.935294Z", + "start_time": "2024-09-07T07:39:53.919487Z" } }, "cell_type": "code", @@ -44,23 +44,199 @@ ], "id": "1d2a51b3414be94", "outputs": [], - "execution_count": 62 + "execution_count": 3 }, { "metadata": { "ExecuteTime": { - "end_time": "2024-09-07T06:18:14.180992Z", - "start_time": "2024-09-07T06:18:14.146973Z" + "end_time": "2024-09-07T07:39:53.998096Z", + "start_time": "2024-09-07T07:39:53.936656Z" + } + }, + "cell_type": "code", + "source": [ + "df_crop_planting = pd.read_excel('./data/2.xlsx', sheet_name=0)\n", + "# 照例去除一下空格\n", + "df_crop_planting['cropName'] = df_crop_planting['cropName'].apply(lambda x: x.strip())\n", + "# ffill\n", + "df_crop_planting['landName'] = df_crop_planting['landName'].ffill()\n", + "df_crop_planting" + ], + "id": "514cd9136d9ca341", + "outputs": [ + { + "data": { + "text/plain": [ + " landName cropNum cropName cropType plantArea season\n", + "0 A1 6 小麦 粮食 80.0 单季\n", + "1 A2 7 玉米 粮食 55.0 单季\n", + "2 A3 7 玉米 粮食 35.0 单季\n", + "3 A4 1 黄豆 粮食(豆类) 72.0 单季\n", + "4 A5 4 绿豆 粮食(豆类) 68.0 单季\n", + ".. ... ... ... ... ... ...\n", + "82 F3 28 小青菜 蔬菜 0.3 第二季\n", + "83 F3 30 生菜 蔬菜 0.3 第二季\n", + "84 F4 19 芸豆 蔬菜(豆类) 0.6 第一季\n", + "85 F4 34 芹菜 蔬菜 0.3 第二季\n", + "86 F4 23 菠菜 蔬菜 0.3 第二季\n", + "\n", + "[87 rows x 6 columns]" + ], + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
landNamecropNumcropNamecropTypeplantAreaseason
0A16小麦粮食80.0单季
1A27玉米粮食55.0单季
2A37玉米粮食35.0单季
3A41黄豆粮食(豆类)72.0单季
4A54绿豆粮食(豆类)68.0单季
.....................
82F328小青菜蔬菜0.3第二季
83F330生菜蔬菜0.3第二季
84F419芸豆蔬菜(豆类)0.6第一季
85F434芹菜蔬菜0.3第二季
86F423菠菜蔬菜0.3第二季
\n", + "

87 rows × 6 columns

\n", + "
" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 4 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-07T07:39:54.013672Z", + "start_time": "2024-09-07T07:39:53.998096Z" } }, "cell_type": "code", "source": [ "\n", - "unit_profit = []\n", + "unit_profit_lsc = []\n", "for line in df_crop_details.values:\n", " s = str(line[7]).split('-')\n", - " unit_profit.append((float(s[0]) + float(s[1])) / 2 * line[5] - line[6])\n", - "df_crop_details['unitProfit'] = unit_profit\n", + " unit_profit_lsc.append((float(s[0]) + float(s[1])) / 2 * line[5] - line[6])\n", + "df_crop_details['unitProfit'] = unit_profit_lsc\n", "df_crop_details" ], "id": "3cdf51a9a9d4d30f", @@ -265,78 +441,88 @@ "" ] }, - "execution_count": 63, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 63 + "execution_count": 5 }, { "metadata": { "ExecuteTime": { - "end_time": "2024-09-07T06:13:15.178785Z", - "start_time": "2024-09-07T06:13:15.170785Z" + "end_time": "2024-09-07T07:39:54.029719Z", + "start_time": "2024-09-07T07:39:54.013672Z" + } + }, + "cell_type": "code", + "source": [ + "# 搞一下季节和年份的集合\n", + "SeasonType = [\"单季\", \"第一季\", \"第二季\"]\n", + "SeasonDict = {\"单季\": 1, \"第一季\": 1, \"第二季\": 2}\n", + "SeasonNum = [1, 2]\n", + "years = [2024, 2025, 2026, 2027, 2028, 2029, 2030]" + ], + "id": "a7661d84217b578c", + "outputs": [], + "execution_count": 6 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-07T07:39:54.045394Z", + "start_time": "2024-09-07T07:39:54.029719Z" } }, "cell_type": "code", "source": [ "# 枚举地块类型\n", "LandType = {\"A\": \"平旱地\", \"B\": \"梯田\", \"C\": \"山坡地\", \"D\": \"水浇地\", \"E\": \"普通大棚\", \"F\": \"智慧大棚\"}\n", - "LandType" + "# LandType" ], "id": "4a4e06a1f2d4d8ab", - "outputs": [ - { - "data": { - "text/plain": [ - "{'A': '平旱地', 'B': '梯田', 'C': '山坡地', 'D': '水浇地', 'E': '普通大棚', 'F': '智慧大棚'}" - ] - }, - "execution_count": 54, - "metadata": {}, - "output_type": "execute_result" - } - ], - "execution_count": 54 + "outputs": [], + "execution_count": 7 }, { "metadata": { "ExecuteTime": { - "end_time": "2024-09-07T06:13:15.901386Z", - "start_time": "2024-09-07T06:13:15.885383Z" + "end_time": "2024-09-07T07:39:54.061240Z", + "start_time": "2024-09-07T07:39:54.045394Z" + } + }, + "cell_type": "code", + "source": [ + "# 枚举地块\n", + "LandName = df_crop_planting['landName'].unique()\n", + "# LandName" + ], + "id": "cc938565a63a8129", + "outputs": [], + "execution_count": 8 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-07T07:39:54.076622Z", + "start_time": "2024-09-07T07:39:54.062582Z" } }, "cell_type": "code", "source": [ "# 读入作物名称\n", "CropName = df_crop_details['cropName'].unique()\n", - "CropName" + "# CropName" ], "id": "7a0e6cc209d93b56", - "outputs": [ - { - "data": { - "text/plain": [ - "array(['黄豆', '黑豆', '红豆', '绿豆', '爬豆', '小麦', '玉米', '谷子', '高粱', '黍子', '荞麦',\n", - " '南瓜', '红薯', '莜麦', '大麦', '水稻', '豇豆', '刀豆', '芸豆', '土豆', '西红柿', '茄子',\n", - " '菠菜', '青椒', '菜花', '包菜', '油麦菜', '小青菜', '黄瓜', '生菜', '辣椒', '空心菜',\n", - " '黄心菜', '芹菜', '大白菜', '白萝卜', '红萝卜', '榆黄菇', '香菇', '白灵菇', '羊肚菌'],\n", - " dtype=object)" - ] - }, - "execution_count": 55, - "metadata": {}, - "output_type": "execute_result" - } - ], - "execution_count": 55 + "outputs": [], + "execution_count": 9 }, { "metadata": { "ExecuteTime": { - "end_time": "2024-09-07T06:13:16.699865Z", - "start_time": "2024-09-07T06:13:16.681863Z" + "end_time": "2024-09-07T07:39:54.092071Z", + "start_time": "2024-09-07T07:39:54.081006Z" } }, "cell_type": "code", @@ -353,591 +539,87 @@ "False" ] }, - "execution_count": 56, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 56 + "execution_count": 10 }, { "metadata": { "ExecuteTime": { - "end_time": "2024-09-07T06:13:17.516868Z", - "start_time": "2024-09-07T06:13:17.369055Z" + "end_time": "2024-09-07T07:39:54.491091Z", + "start_time": "2024-09-07T07:39:54.093999Z" } }, "cell_type": "code", "source": [ "# 亩产量\n", - "unit_yield = {\n", + "unit_yield_lsc = {\n", " l: {\n", - " c: df_crop_details[\n", - " (df_crop_details['cropName'] == c) &\n", - " (df_crop_details['cropLandType'] == l)\n", - " ]['unitYield'].values[0] if df_crop_details[\n", - " (df_crop_details['cropName'] == c) &\n", - " (df_crop_details['cropLandType'] == l)\n", - " ]['unitYield'].values.size > 0 else 0\n", - " for c in CropName\n", + " s: {\n", + " c: df_crop_details[\n", + " (df_crop_details['cropName'] == c) &\n", + " (df_crop_details['cropLandType'] == l) &\n", + " (df_crop_details['season'] == s)\n", + " ]['unitYield'].values[0] if df_crop_details[\n", + " (df_crop_details['cropName'] == c) &\n", + " (df_crop_details['cropLandType'] == l) &\n", + " (df_crop_details['season'] == s)\n", + " ]['unitYield'].values.size > 0 else 0\n", + " for c in CropName\n", + " } for s in SeasonType\n", " }\n", " for l in LandType.values()\n", "}\n", "\n", - "unit_yield" + "# unit_yield" ], "id": "22f9730e3d9c1016", - "outputs": [ - { - "data": { - "text/plain": [ - "{'平旱地': {'黄豆': 400,\n", - " '黑豆': 500,\n", - " '红豆': 400,\n", - " '绿豆': 350,\n", - " '爬豆': 415,\n", - " '小麦': 800,\n", - " '玉米': 1000,\n", - " '谷子': 400,\n", - " '高粱': 630,\n", - " '黍子': 525,\n", - " '荞麦': 110,\n", - " '南瓜': 3000,\n", - " '红薯': 2200,\n", - " '莜麦': 420,\n", - " '大麦': 525,\n", - " '水稻': 0,\n", - " '豇豆': 0,\n", - " '刀豆': 0,\n", - " '芸豆': 0,\n", - " '土豆': 0,\n", - " '西红柿': 0,\n", - " '茄子': 0,\n", - " '菠菜': 0,\n", - " '青椒': 0,\n", - " '菜花': 0,\n", - " '包菜': 0,\n", - " '油麦菜': 0,\n", - " '小青菜': 0,\n", - " '黄瓜': 0,\n", - " '生菜': 0,\n", - " '辣椒': 0,\n", - " '空心菜': 0,\n", - " '黄心菜': 0,\n", - " '芹菜': 0,\n", - " '大白菜': 0,\n", - " '白萝卜': 0,\n", - " '红萝卜': 0,\n", - " '榆黄菇': 0,\n", - " '香菇': 0,\n", - " '白灵菇': 0,\n", - " '羊肚菌': 0},\n", - " '梯田': {'黄豆': 380,\n", - " '黑豆': 475,\n", - " '红豆': 380,\n", - " '绿豆': 330,\n", - " '爬豆': 395,\n", - " '小麦': 760,\n", - " '玉米': 950,\n", - " '谷子': 380,\n", - " '高粱': 600,\n", - " '黍子': 500,\n", - " '荞麦': 105,\n", - " '南瓜': 2850,\n", - " '红薯': 2100,\n", - " '莜麦': 400,\n", - " '大麦': 500,\n", - " '水稻': 0,\n", - " '豇豆': 0,\n", - " '刀豆': 0,\n", - " '芸豆': 0,\n", - " '土豆': 0,\n", - " '西红柿': 0,\n", - " '茄子': 0,\n", - " '菠菜': 0,\n", - " '青椒': 0,\n", - " '菜花': 0,\n", - " '包菜': 0,\n", - " '油麦菜': 0,\n", - " '小青菜': 0,\n", - " '黄瓜': 0,\n", - " '生菜': 0,\n", - " '辣椒': 0,\n", - " '空心菜': 0,\n", - " '黄心菜': 0,\n", - " '芹菜': 0,\n", - " '大白菜': 0,\n", - " '白萝卜': 0,\n", - " '红萝卜': 0,\n", - " '榆黄菇': 0,\n", - " '香菇': 0,\n", - " '白灵菇': 0,\n", - " '羊肚菌': 0},\n", - " '山坡地': {'黄豆': 360,\n", - " '黑豆': 450,\n", - " '红豆': 360,\n", - " '绿豆': 315,\n", - " '爬豆': 375,\n", - " '小麦': 720,\n", - " '玉米': 900,\n", - " '谷子': 360,\n", - " '高粱': 570,\n", - " '黍子': 475,\n", - " '荞麦': 100,\n", - " '南瓜': 2700,\n", - " '红薯': 2000,\n", - " '莜麦': 380,\n", - " '大麦': 475,\n", - " '水稻': 0,\n", - " '豇豆': 0,\n", - " '刀豆': 0,\n", - " '芸豆': 0,\n", - " '土豆': 0,\n", - " '西红柿': 0,\n", - " '茄子': 0,\n", - " '菠菜': 0,\n", - " '青椒': 0,\n", - " '菜花': 0,\n", - " '包菜': 0,\n", - " '油麦菜': 0,\n", - " '小青菜': 0,\n", - " '黄瓜': 0,\n", - " '生菜': 0,\n", - " '辣椒': 0,\n", - " '空心菜': 0,\n", - " '黄心菜': 0,\n", - " '芹菜': 0,\n", - " '大白菜': 0,\n", - " '白萝卜': 0,\n", - " '红萝卜': 0,\n", - " '榆黄菇': 0,\n", - " '香菇': 0,\n", - " '白灵菇': 0,\n", - " '羊肚菌': 0},\n", - " '水浇地': {'黄豆': 0,\n", - " '黑豆': 0,\n", - " '红豆': 0,\n", - " '绿豆': 0,\n", - " '爬豆': 0,\n", - " '小麦': 0,\n", - " '玉米': 0,\n", - " '谷子': 0,\n", - " '高粱': 0,\n", - " '黍子': 0,\n", - " '荞麦': 0,\n", - " '南瓜': 0,\n", - " '红薯': 0,\n", - " '莜麦': 0,\n", - " '大麦': 0,\n", - " '水稻': 500,\n", - " '豇豆': 3000,\n", - " '刀豆': 2000,\n", - " '芸豆': 3000,\n", - " '土豆': 2000,\n", - " '西红柿': 2400,\n", - " '茄子': 6400,\n", - " '菠菜': 2700,\n", - " '青椒': 2400,\n", - " '菜花': 3300,\n", - " '包菜': 3700,\n", - " '油麦菜': 4100,\n", - " '小青菜': 3200,\n", - " '黄瓜': 12000,\n", - " '生菜': 4100,\n", - " '辣椒': 1600,\n", - " '空心菜': 10000,\n", - " '黄心菜': 5000,\n", - " '芹菜': 5500,\n", - " '大白菜': 5000,\n", - " '白萝卜': 4000,\n", - " '红萝卜': 3000,\n", - " '榆黄菇': 0,\n", - " '香菇': 0,\n", - " '白灵菇': 0,\n", - " '羊肚菌': 0},\n", - " '普通大棚': {'黄豆': 0,\n", - " '黑豆': 0,\n", - " '红豆': 0,\n", - " '绿豆': 0,\n", - " '爬豆': 0,\n", - " '小麦': 0,\n", - " '玉米': 0,\n", - " '谷子': 0,\n", - " '高粱': 0,\n", - " '黍子': 0,\n", - " '荞麦': 0,\n", - " '南瓜': 0,\n", - " '红薯': 0,\n", - " '莜麦': 0,\n", - " '大麦': 0,\n", - " '水稻': 0,\n", - " '豇豆': 3600,\n", - " '刀豆': 2400,\n", - " '芸豆': 3600,\n", - " '土豆': 2400,\n", - " '西红柿': 3000,\n", - " '茄子': 8000,\n", - " '菠菜': 3300,\n", - " '青椒': 3000,\n", - " '菜花': 4000,\n", - " '包菜': 4500,\n", - " '油麦菜': 5000,\n", - " '小青菜': 4000,\n", - " '黄瓜': 15000,\n", - " '生菜': 5000,\n", - " '辣椒': 2000,\n", - " '空心菜': 12000,\n", - " '黄心菜': 6000,\n", - " '芹菜': 6600,\n", - " '大白菜': 0,\n", - " '白萝卜': 0,\n", - " '红萝卜': 0,\n", - " '榆黄菇': 5000,\n", - " '香菇': 4000,\n", - " '白灵菇': 10000,\n", - " '羊肚菌': 1000},\n", - " '智慧大棚': {'黄豆': 0,\n", - " '黑豆': 0,\n", - " '红豆': 0,\n", - " '绿豆': 0,\n", - " '爬豆': 0,\n", - " '小麦': 0,\n", - " '玉米': 0,\n", - " '谷子': 0,\n", - " '高粱': 0,\n", - " '黍子': 0,\n", - " '荞麦': 0,\n", - " '南瓜': 0,\n", - " '红薯': 0,\n", - " '莜麦': 0,\n", - " '大麦': 0,\n", - " '水稻': 0,\n", - " '豇豆': 3600,\n", - " '刀豆': 2400,\n", - " '芸豆': 3600,\n", - " '土豆': 2400,\n", - " '西红柿': 3000,\n", - " '茄子': 8000,\n", - " '菠菜': 3300,\n", - " '青椒': 3000,\n", - " '菜花': 4000,\n", - " '包菜': 4500,\n", - " '油麦菜': 5000,\n", - " '小青菜': 4000,\n", - " '黄瓜': 15000,\n", - " '生菜': 5000,\n", - " '辣椒': 2000,\n", - " '空心菜': 12000,\n", - " '黄心菜': 6000,\n", - " '芹菜': 6600,\n", - " '大白菜': 0,\n", - " '白萝卜': 0,\n", - " '红萝卜': 0,\n", - " '榆黄菇': 0,\n", - " '香菇': 0,\n", - " '白灵菇': 0,\n", - " '羊肚菌': 0}}" - ] - }, - "execution_count": 57, - "metadata": {}, - "output_type": "execute_result" - } - ], - "execution_count": 57 + "outputs": [], + "execution_count": 11 }, { "metadata": { "ExecuteTime": { - "end_time": "2024-09-07T06:13:18.373009Z", - "start_time": "2024-09-07T06:13:18.236981Z" + "end_time": "2024-09-07T07:39:54.993663Z", + "start_time": "2024-09-07T07:39:54.493875Z" } }, "cell_type": "code", "source": [ "# 亩利润\n", - "unit_profit = {\n", + "unit_profit_lsc = {\n", " l: {\n", - " c: df_crop_details[\n", - " (df_crop_details['cropName'] == c) &\n", - " (df_crop_details['cropLandType'] == l)\n", - " ]['unitProfit'].values[0]\n", - " if df_crop_details[\n", - " (df_crop_details['cropName'] == c) &\n", - " (df_crop_details['cropLandType'] == l)\n", - " ]['unitYield'].values.size > 0 else 0\n", - " for c in CropName\n", + " s: {\n", + " c: df_crop_details[\n", + " (df_crop_details['cropName'] == c) &\n", + " (df_crop_details['cropLandType'] == l) &\n", + " (df_crop_details['season'] == s)\n", + " ]['unitProfit'].values[0]\n", + " if df_crop_details[\n", + " (df_crop_details['cropName'] == c) &\n", + " (df_crop_details['cropLandType'] == l) &\n", + " (df_crop_details['season'] == s)\n", + " ]['unitYield'].values.size > 0 else 0\n", + " for c in CropName\n", + " } for s in SeasonType\n", " }\n", " for l in LandType.values()\n", "}\n", "\n", - "unit_profit" + "# unit_profit" ], "id": "99dbe4ca6c54db0b", - "outputs": [ - { - "data": { - "text/plain": [ - "{'平旱地': {'黄豆': 900.0,\n", - " '黑豆': 3350.0,\n", - " '红豆': 2950.0,\n", - " '绿豆': 2100.0,\n", - " '爬豆': 2451.25,\n", - " '小麦': 2350.0,\n", - " '玉米': 2500.0,\n", - " '谷子': 2340.0,\n", - " '高粱': 3380.0,\n", - " '黍子': 3577.5,\n", - " '荞麦': 4050.0,\n", - " '南瓜': 3500.0,\n", - " '红薯': 5150.0,\n", - " '莜麦': 1910.0,\n", - " '大麦': 1487.5,\n", - " '水稻': 0,\n", - " '豇豆': 0,\n", - " '刀豆': 0,\n", - " '芸豆': 0,\n", - " '土豆': 0,\n", - " '西红柿': 0,\n", - " '茄子': 0,\n", - " '菠菜': 0,\n", - " '青椒': 0,\n", - " '菜花': 0,\n", - " '包菜': 0,\n", - " '油麦菜': 0,\n", - " '小青菜': 0,\n", - " '黄瓜': 0,\n", - " '生菜': 0,\n", - " '辣椒': 0,\n", - " '空心菜': 0,\n", - " '黄心菜': 0,\n", - " '芹菜': 0,\n", - " '大白菜': 0,\n", - " '白萝卜': 0,\n", - " '红萝卜': 0,\n", - " '榆黄菇': 0,\n", - " '香菇': 0,\n", - " '白灵菇': 0,\n", - " '羊肚菌': 0},\n", - " '梯田': {'黄豆': 835.0,\n", - " '黑豆': 3162.5,\n", - " '红豆': 2785.0,\n", - " '绿豆': 1960.0,\n", - " '爬豆': 2316.25,\n", - " '小麦': 2210.0,\n", - " '玉米': 2350.0,\n", - " '谷子': 2205.0,\n", - " '高粱': 3200.0,\n", - " '黍子': 3390.0,\n", - " '荞麦': 3850.0,\n", - " '南瓜': 3275.0,\n", - " '红薯': 4825.0,\n", - " '莜麦': 1800.0,\n", - " '大麦': 1400.0,\n", - " '水稻': 0,\n", - " '豇豆': 0,\n", - " '刀豆': 0,\n", - " '芸豆': 0,\n", - " '土豆': 0,\n", - " '西红柿': 0,\n", - " '茄子': 0,\n", - " '菠菜': 0,\n", - " '青椒': 0,\n", - " '菜花': 0,\n", - " '包菜': 0,\n", - " '油麦菜': 0,\n", - " '小青菜': 0,\n", - " '黄瓜': 0,\n", - " '生菜': 0,\n", - " '辣椒': 0,\n", - " '空心菜': 0,\n", - " '黄心菜': 0,\n", - " '芹菜': 0,\n", - " '大白菜': 0,\n", - " '白萝卜': 0,\n", - " '红萝卜': 0,\n", - " '榆黄菇': 0,\n", - " '香菇': 0,\n", - " '白灵菇': 0,\n", - " '羊肚菌': 0},\n", - " '山坡地': {'黄豆': 770.0,\n", - " '黑豆': 2975.0,\n", - " '红豆': 2620.0,\n", - " '绿豆': 1855.0,\n", - " '爬豆': 2181.25,\n", - " '小麦': 2070.0,\n", - " '玉米': 2200.0,\n", - " '谷子': 2070.0,\n", - " '高粱': 3020.0,\n", - " '黍子': 3202.5,\n", - " '荞麦': 3650.0,\n", - " '南瓜': 3050.0,\n", - " '红薯': 4500.0,\n", - " '莜麦': 1690.0,\n", - " '大麦': 1312.5,\n", - " '水稻': 0,\n", - " '豇豆': 0,\n", - " '刀豆': 0,\n", - " '芸豆': 0,\n", - " '土豆': 0,\n", - " '西红柿': 0,\n", - " '茄子': 0,\n", - " '菠菜': 0,\n", - " '青椒': 0,\n", - " '菜花': 0,\n", - " '包菜': 0,\n", - " '油麦菜': 0,\n", - " '小青菜': 0,\n", - " '黄瓜': 0,\n", - " '生菜': 0,\n", - " '辣椒': 0,\n", - " '空心菜': 0,\n", - " '黄心菜': 0,\n", - " '芹菜': 0,\n", - " '大白菜': 0,\n", - " '白萝卜': 0,\n", - " '红萝卜': 0,\n", - " '榆黄菇': 0,\n", - " '香菇': 0,\n", - " '白灵菇': 0,\n", - " '羊肚菌': 0},\n", - " '水浇地': {'黄豆': 0,\n", - " '黑豆': 0,\n", - " '红豆': 0,\n", - " '绿豆': 0,\n", - " '爬豆': 0,\n", - " '小麦': 0,\n", - " '玉米': 0,\n", - " '谷子': 0,\n", - " '高粱': 0,\n", - " '黍子': 0,\n", - " '荞麦': 0,\n", - " '南瓜': 0,\n", - " '红薯': 0,\n", - " '莜麦': 0,\n", - " '大麦': 0,\n", - " '水稻': 2820.0,\n", - " '豇豆': 22000.0,\n", - " '刀豆': 12500.0,\n", - " '芸豆': 17500.0,\n", - " '土豆': 5500.0,\n", - " '西红柿': 13000.0,\n", - " '茄子': 33200.0,\n", - " '菠菜': 13225.0,\n", - " '青椒': 11000.0,\n", - " '菜花': 15750.0,\n", - " '包菜': 21150.0,\n", - " '油麦菜': 18900.0,\n", - " '小青菜': 16800.0,\n", - " '黄瓜': 81100.0,\n", - " '生菜': 19925.0,\n", - " '辣椒': 10600.0,\n", - " '空心菜': 40900.0,\n", - " '黄心菜': 20500.0,\n", - " '芹菜': 21100.0,\n", - " '大白菜': 10500.0,\n", - " '白萝卜': 9500.0,\n", - " '红萝卜': 9250.0,\n", - " '榆黄菇': 0,\n", - " '香菇': 0,\n", - " '白灵菇': 0,\n", - " '羊肚菌': 0},\n", - " '普通大棚': {'黄豆': 0,\n", - " '黑豆': 0,\n", - " '红豆': 0,\n", - " '绿豆': 0,\n", - " '爬豆': 0,\n", - " '小麦': 0,\n", - " '玉米': 0,\n", - " '谷子': 0,\n", - " '高粱': 0,\n", - " '黍子': 0,\n", - " '荞麦': 0,\n", - " '南瓜': 0,\n", - " '红薯': 0,\n", - " '莜麦': 0,\n", - " '大麦': 0,\n", - " '水稻': 0,\n", - " '豇豆': 26400.0,\n", - " '刀豆': 15000.0,\n", - " '芸豆': 21000.0,\n", - " '土豆': 6600.0,\n", - " '西红柿': 16350.0,\n", - " '茄子': 41600.0,\n", - " '菠菜': 16275.0,\n", - " '青椒': 13750.0,\n", - " '菜花': 19000.0,\n", - " '包菜': 25750.0,\n", - " '油麦菜': 23000.0,\n", - " '小青菜': 21000.0,\n", - " '黄瓜': 101500.0,\n", - " '生菜': 24250.0,\n", - " '辣椒': 13300.0,\n", - " '空心菜': 49000.0,\n", - " '黄心菜': 24500.0,\n", - " '芹菜': 25300.0,\n", - " '大白菜': 0,\n", - " '白萝卜': 0,\n", - " '红萝卜': 0,\n", - " '榆黄菇': 284500.0,\n", - " '香菇': 74000.0,\n", - " '白灵菇': 150000.0,\n", - " '羊肚菌': 90000.0},\n", - " '智慧大棚': {'黄豆': 0,\n", - " '黑豆': 0,\n", - " '红豆': 0,\n", - " '绿豆': 0,\n", - " '爬豆': 0,\n", - " '小麦': 0,\n", - " '玉米': 0,\n", - " '谷子': 0,\n", - " '高粱': 0,\n", - " '黍子': 0,\n", - " '荞麦': 0,\n", - " '南瓜': 0,\n", - " '红薯': 0,\n", - " '莜麦': 0,\n", - " '大麦': 0,\n", - " '水稻': 0,\n", - " '豇豆': 26400.0,\n", - " '刀豆': 15000.0,\n", - " '芸豆': 21000.0,\n", - " '土豆': 6600.0,\n", - " '西红柿': 16350.0,\n", - " '茄子': 41600.0,\n", - " '菠菜': 16275.0,\n", - " '青椒': 13750.0,\n", - " '菜花': 19000.0,\n", - " '包菜': 25750.0,\n", - " '油麦菜': 23000.0,\n", - " '小青菜': 21000.0,\n", - " '黄瓜': 101500.0,\n", - " '生菜': 24250.0,\n", - " '辣椒': 13300.0,\n", - " '空心菜': 49000.0,\n", - " '黄心菜': 24500.0,\n", - " '芹菜': 25300.0,\n", - " '大白菜': 0,\n", - " '白萝卜': 0,\n", - " '红萝卜': 0,\n", - " '榆黄菇': 0,\n", - " '香菇': 0,\n", - " '白灵菇': 0,\n", - " '羊肚菌': 0}}" - ] - }, - "execution_count": 58, - "metadata": {}, - "output_type": "execute_result" - } - ], - "execution_count": 58 + "outputs": [], + "execution_count": 12 }, { "metadata": { "ExecuteTime": { - "end_time": "2024-09-07T06:19:55.362587Z", - "start_time": "2024-09-07T06:19:55.203621Z" + "end_time": "2024-09-07T07:39:55.009266Z", + "start_time": "2024-09-07T07:39:54.993663Z" } }, "cell_type": "code", @@ -949,96 +631,169 @@ "}\n", "\n", "# 这里需要另一张表\n", - "df_crop_planting = pd.read_excel('./data/2.xlsx', sheet_name=0)\n", - "# 照例去除一下空格\n", - "df_crop_planting['cropName'] = df_crop_planting['cropName'].apply(lambda x: x.strip())\n", - "# ffill\n", - "df_crop_planting['landName'] = df_crop_planting['landName'].ffill()\n", - "for line in df_crop_planting.values:\n", - " # 面积*该土地类型的亩产量\n", - " crop_demand[line[2]] += line[4] * unit_yield[LandType[line[0][0]]][line[2]]\n", + "# 代码独立出来移到上面去了\n", "\n", - "crop_demand" + "for line in df_crop_planting.values:\n", + " # 面积*该土地类型的亩产量 面积 地块类型字典 地块类型 季节 作物名称\n", + " crop_demand[line[2]] += line[4] * unit_yield_lsc[LandType[line[0][0]]][line[5]][line[2]]\n", + "\n", + "# crop_demand" ], "id": "13f2ccc7aa215d4c", - "outputs": [ - { - "data": { - "text/plain": [ - "{'黄豆': 57000.0,\n", - " '黑豆': 21850.0,\n", - " '红豆': 22400.0,\n", - " '绿豆': 33040.0,\n", - " '爬豆': 9875.0,\n", - " '小麦': 170840.0,\n", - " '玉米': 132750.0,\n", - " '谷子': 71400.0,\n", - " '高粱': 30000.0,\n", - " '黍子': 12500.0,\n", - " '荞麦': 1500.0,\n", - " '南瓜': 35100.0,\n", - " '红薯': 36000.0,\n", - " '莜麦': 14000.0,\n", - " '大麦': 10000.0,\n", - " '水稻': 21000.0,\n", - " '豇豆': 36480.0,\n", - " '刀豆': 26880.0,\n", - " '芸豆': 6480.0,\n", - " '土豆': 30000.0,\n", - " '西红柿': 36300.0,\n", - " '茄子': 45600.0,\n", - " '菠菜': 990.0,\n", - " '青椒': 2700.0,\n", - " '菜花': 3600.0,\n", - " '包菜': 4050.0,\n", - " '油麦菜': 4500.0,\n", - " '小青菜': 35600.0,\n", - " '黄瓜': 13500.0,\n", - " '生菜': 3000.0,\n", - " '辣椒': 1200.0,\n", - " '空心菜': 3600.0,\n", - " '黄心菜': 1800.0,\n", - " '芹菜': 1980.0,\n", - " '大白菜': 150000.0,\n", - " '白萝卜': 100000.0,\n", - " '红萝卜': 36000.0,\n", - " '榆黄菇': 9000.0,\n", - " '香菇': 7200.0,\n", - " '白灵菇': 18000.0,\n", - " '羊肚菌': 4200.0}" - ] - }, - "execution_count": 67, - "metadata": {}, - "output_type": "execute_result" - } - ], - "execution_count": 67 + "outputs": [], + "execution_count": 13 }, { "metadata": { "ExecuteTime": { - "end_time": "2024-09-07T06:21:14.398778Z", - "start_time": "2024-09-07T06:21:14.391229Z" + "end_time": "2024-09-07T07:39:55.056963Z", + "start_time": "2024-09-07T07:39:55.009266Z" } }, "cell_type": "code", "source": [ - "# 搞一下季节和年份的集合\n", - "seasons = [1, 2]\n", - "years = [2024, 2025, 2026, 2027, 2028, 2029, 2030]" + "# 准备开搞\n", + "from pulp import LpMaximize, LpProblem, LpVariable, lpSum, value, LpInteger, PULP_CBC_CMD, LpContinuous, LpBinary\n" ], - "id": "a7661d84217b578c", + "id": "5d09872708d40da4", "outputs": [], - "execution_count": 68 + "execution_count": 14 }, { - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-07T07:39:55.072925Z", + "start_time": "2024-09-07T07:39:55.058097Z" + } + }, "cell_type": "code", + "source": "model = LpProblem(\"Crop_Planting_Optimization_with_Specific_Rules\", LpMaximize)", + "id": "b6eff87c7a762769", "outputs": [], - "execution_count": null, - "source": "", - "id": "5d09872708d40da4" + "execution_count": 15 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-07T07:39:55.088872Z", + "start_time": "2024-09-07T07:39:55.075153Z" + } + }, + "cell_type": "code", + "source": [ + "# %timeit X = LpVariable.dicts(\"X\", (CropName, LandName, years, seasons), lowBound=0, cat=LpContinuous)\n", + "# %timeit XX = LpVariable.dicts(\"X\", [(c, l, y, s) for c in CropName for l in LandName for y in years for s in seasons],lowBound=0, cat=LpContinuous)" + ], + "id": "7bfdb9425c3e9683", + "outputs": [], + "execution_count": 16 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-07T07:39:55.393238Z", + "start_time": "2024-09-07T07:39:55.091269Z" + } + }, + "cell_type": "code", + "source": [ + "# 地块l在y年的s季的种植c的量\n", + "# X = LpVariable.dicts(\"crop_plant_area\", (CropName, LandName, years, SeasonType), lowBound=0, cat=LpContinuous)\n", + "X = LpVariable.dicts(\"X\", [(c, l, y, s)\n", + " for c in CropName\n", + " for l in LandName\n", + " for y in years\n", + " for s in SeasonType],\n", + " lowBound=0,\n", + " cat=LpContinuous\n", + " )\n", + "# X" + ], + "id": "4cb129e20385a7ee", + "outputs": [], + "execution_count": 17 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-07T07:39:55.696316Z", + "start_time": "2024-09-07T07:39:55.393238Z" + } + }, + "cell_type": "code", + "source": [ + "# 地块l在y年的s季是否种植了c\n", + "# Y = LpVariable.dicts(\"crop_plant_bool\", (CropName, LandName, years, SeasonType), cat=LpBinary)\n", + "Y = LpVariable.dicts(\"Y\", [(c, l, y, s) for c in CropName for l in LandName for y in years for s in SeasonType],\n", + " cat=LpBinary)\n", + "\n", + "# Y" + ], + "id": "9dab983ca7b3b607", + "outputs": [], + "execution_count": 18 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-07T07:39:57.605199Z", + "start_time": "2024-09-07T07:39:55.697108Z" + } + }, + "cell_type": "code", + "source": [ + "# 确保与X进行01约束\n", + "for c in CropName:\n", + " for l in LandName:\n", + " for y in years:\n", + " for s in SeasonType:\n", + " # 如果种植了作物,则种植面积大于0\n", + " model += X[c, l, y, s] <= 10000000 * Y[c, l, y, s], f\"PlantingConstraint1_{c}_{l}_{y}_{s}\"\n", + " # 如果未种植作物,则种植面积为0\n", + " model += X[c, l, y, s] >= 0.000001 * Y[c, l, y, s], f\"PlantingConstraint2_{c}_{l}_{y}_{s}\"" + ], + "id": "603175d36624172f", + "outputs": [], + "execution_count": 19 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-07T07:40:30.545252Z", + "start_time": "2024-09-07T07:40:30.317563Z" + } + }, + "cell_type": "code", + "source": [ + "# 目标函数:总利润 = sum(x[i]*profit[c,l,s])\n", + "model += lpSum(\n", + " X[c,l,y,s] * unit_profit_lsc[LandType[l[0]]][s][c]\n", + " for c in CropName\n", + " for l in LandName\n", + " for y in years\n", + " for s in SeasonType\n", + ")\n" + ], + "id": "4505b0f2fe6bf93d", + "outputs": [], + "execution_count": 21 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-09-07T07:39:58.955478Z", + "start_time": "2024-09-07T07:39:58.955478Z" + } + }, + "cell_type": "code", + "source": [ + "# 每个季节每种作物的种植量必须小于需求量\n", + "for c in CropName:\n", + " " + ], + "id": "1f185c0856fbcf27", + "outputs": [], + "execution_count": null } ], "metadata": {