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",
+ " landName | \n",
+ " cropNum | \n",
+ " cropName | \n",
+ " cropType | \n",
+ " plantArea | \n",
+ " season | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " A1 | \n",
+ " 6 | \n",
+ " 小麦 | \n",
+ " 粮食 | \n",
+ " 80.0 | \n",
+ " 单季 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " A2 | \n",
+ " 7 | \n",
+ " 玉米 | \n",
+ " 粮食 | \n",
+ " 55.0 | \n",
+ " 单季 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " A3 | \n",
+ " 7 | \n",
+ " 玉米 | \n",
+ " 粮食 | \n",
+ " 35.0 | \n",
+ " 单季 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " A4 | \n",
+ " 1 | \n",
+ " 黄豆 | \n",
+ " 粮食(豆类) | \n",
+ " 72.0 | \n",
+ " 单季 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " A5 | \n",
+ " 4 | \n",
+ " 绿豆 | \n",
+ " 粮食(豆类) | \n",
+ " 68.0 | \n",
+ " 单季 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 82 | \n",
+ " F3 | \n",
+ " 28 | \n",
+ " 小青菜 | \n",
+ " 蔬菜 | \n",
+ " 0.3 | \n",
+ " 第二季 | \n",
+ "
\n",
+ " \n",
+ " | 83 | \n",
+ " F3 | \n",
+ " 30 | \n",
+ " 生菜 | \n",
+ " 蔬菜 | \n",
+ " 0.3 | \n",
+ " 第二季 | \n",
+ "
\n",
+ " \n",
+ " | 84 | \n",
+ " F4 | \n",
+ " 19 | \n",
+ " 芸豆 | \n",
+ " 蔬菜(豆类) | \n",
+ " 0.6 | \n",
+ " 第一季 | \n",
+ "
\n",
+ " \n",
+ " | 85 | \n",
+ " F4 | \n",
+ " 34 | \n",
+ " 芹菜 | \n",
+ " 蔬菜 | \n",
+ " 0.3 | \n",
+ " 第二季 | \n",
+ "
\n",
+ " \n",
+ " | 86 | \n",
+ " F4 | \n",
+ " 23 | \n",
+ " 菠菜 | \n",
+ " 蔬菜 | \n",
+ " 0.3 | \n",
+ " 第二季 | \n",
+ "
\n",
+ " \n",
+ "
\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": {