2024-09-07 06:22:58 +00:00
{
"cells": [
{
"metadata": {
"ExecuteTime": {
2024-09-07 07:45:25 +00:00
"end_time": "2024-09-07T07:39:53.146868Z",
"start_time": "2024-09-07T07:39:52.630439Z"
2024-09-07 06:22:58 +00:00
}
},
"cell_type": "code",
"source": "import pandas as pd",
"id": "e19ec4ae5347c678",
"outputs": [],
2024-09-07 07:45:25 +00:00
"execution_count": 1
2024-09-07 06:22:58 +00:00
},
{
"metadata": {
"ExecuteTime": {
2024-09-07 07:45:25 +00:00
"end_time": "2024-09-07T07:39:53.919487Z",
"start_time": "2024-09-07T07:39:53.146868Z"
2024-09-07 06:22:58 +00:00
}
},
"cell_type": "code",
"source": [
"\n",
"df_crop_details = pd.read_excel('./data/2.xlsx', sheet_name=1)"
],
"id": "initial_id",
"outputs": [],
2024-09-07 07:45:25 +00:00
"execution_count": 2
2024-09-07 06:22:58 +00:00
},
{
"metadata": {
"ExecuteTime": {
2024-09-07 07:45:25 +00:00
"end_time": "2024-09-07T07:39:53.935294Z",
"start_time": "2024-09-07T07:39:53.919487Z"
2024-09-07 06:22:58 +00:00
}
},
"cell_type": "code",
"source": [
"# 去除空格\n",
"df_crop_details['cropName'] = df_crop_details['cropName'].apply(lambda x: x.strip())\n",
"# CropType = [x.strip() for x in CropType]\n"
],
"id": "1d2a51b3414be94",
"outputs": [],
2024-09-07 07:45:25 +00:00
"execution_count": 3
2024-09-07 06:22:58 +00:00
},
{
"metadata": {
"ExecuteTime": {
2024-09-07 07:45:25 +00:00
"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": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>landName</th>\n",
" <th>cropNum</th>\n",
" <th>cropName</th>\n",
" <th>cropType</th>\n",
" <th>plantArea</th>\n",
" <th>season</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>A1</td>\n",
" <td>6</td>\n",
" <td>小麦</td>\n",
" <td>粮食</td>\n",
" <td>80.0</td>\n",
" <td>单季</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>A2</td>\n",
" <td>7</td>\n",
" <td>玉米</td>\n",
" <td>粮食</td>\n",
" <td>55.0</td>\n",
" <td>单季</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>A3</td>\n",
" <td>7</td>\n",
" <td>玉米</td>\n",
" <td>粮食</td>\n",
" <td>35.0</td>\n",
" <td>单季</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>A4</td>\n",
" <td>1</td>\n",
" <td>黄豆</td>\n",
" <td>粮食(豆类)</td>\n",
" <td>72.0</td>\n",
" <td>单季</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>A5</td>\n",
" <td>4</td>\n",
" <td>绿豆</td>\n",
" <td>粮食(豆类)</td>\n",
" <td>68.0</td>\n",
" <td>单季</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>82</th>\n",
" <td>F3</td>\n",
" <td>28</td>\n",
" <td>小青菜</td>\n",
" <td>蔬菜</td>\n",
" <td>0.3</td>\n",
" <td>第二季</td>\n",
" </tr>\n",
" <tr>\n",
" <th>83</th>\n",
" <td>F3</td>\n",
" <td>30</td>\n",
" <td>生菜</td>\n",
" <td>蔬菜</td>\n",
" <td>0.3</td>\n",
" <td>第二季</td>\n",
" </tr>\n",
" <tr>\n",
" <th>84</th>\n",
" <td>F4</td>\n",
" <td>19</td>\n",
" <td>芸豆</td>\n",
" <td>蔬菜(豆类)</td>\n",
" <td>0.6</td>\n",
" <td>第一季</td>\n",
" </tr>\n",
" <tr>\n",
" <th>85</th>\n",
" <td>F4</td>\n",
" <td>34</td>\n",
" <td>芹菜</td>\n",
" <td>蔬菜</td>\n",
" <td>0.3</td>\n",
" <td>第二季</td>\n",
" </tr>\n",
" <tr>\n",
" <th>86</th>\n",
" <td>F4</td>\n",
" <td>23</td>\n",
" <td>菠菜</td>\n",
" <td>蔬菜</td>\n",
" <td>0.3</td>\n",
" <td>第二季</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>87 rows × 6 columns</p>\n",
"</div>"
]
},
"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"
2024-09-07 06:22:58 +00:00
}
},
"cell_type": "code",
"source": [
"\n",
2024-09-07 07:45:25 +00:00
"unit_profit_lsc = []\n",
2024-09-07 06:22:58 +00:00
"for line in df_crop_details.values:\n",
" s = str(line[7]).split('-')\n",
2024-09-07 07:45:25 +00:00
" unit_profit_lsc.append((float(s[0]) + float(s[1])) / 2 * line[5] - line[6])\n",
"df_crop_details['unitProfit'] = unit_profit_lsc\n",
2024-09-07 06:22:58 +00:00
"df_crop_details"
],
"id": "3cdf51a9a9d4d30f",
"outputs": [
{
"data": {
"text/plain": [
" no cropNum cropName cropLandType season unitYield cost price \\\n",
"0 1 1 黄豆 平旱地 单季 400 400 2.50-4.00 \n",
"1 2 2 黑豆 平旱地 单季 500 400 6.50-8.50 \n",
"2 3 3 红豆 平旱地 单季 400 350 7.50-9.00 \n",
"3 4 4 绿豆 平旱地 单季 350 350 6.00-8.00 \n",
"4 5 5 爬豆 平旱地 单季 415 350 6.00-7.50 \n",
".. ... ... ... ... ... ... ... ... \n",
"120 103 30 生菜 智慧大棚 第二季 4500 2200 5.40-7.20 \n",
"121 104 31 辣椒 智慧大棚 第二季 1800 1300 7.20-10.20 \n",
"122 105 32 空心菜 智慧大棚 第二季 11000 5500 3.60-7.20 \n",
"123 106 33 黄心菜 智慧大棚 第二季 5400 2750 4.80-6.00 \n",
"124 107 34 芹菜 智慧大棚 第二季 6000 1200 3.80-5.80 \n",
"\n",
" unitProfit \n",
"0 900.00 \n",
"1 3350.00 \n",
"2 2950.00 \n",
"3 2100.00 \n",
"4 2451.25 \n",
".. ... \n",
"120 26150.00 \n",
"121 14360.00 \n",
"122 53900.00 \n",
"123 26410.00 \n",
"124 27600.00 \n",
"\n",
"[125 rows x 9 columns]"
],
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>no</th>\n",
" <th>cropNum</th>\n",
" <th>cropName</th>\n",
" <th>cropLandType</th>\n",
" <th>season</th>\n",
" <th>unitYield</th>\n",
" <th>cost</th>\n",
" <th>price</th>\n",
" <th>unitProfit</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>黄豆</td>\n",
" <td>平旱地</td>\n",
" <td>单季</td>\n",
" <td>400</td>\n",
" <td>400</td>\n",
" <td>2.50-4.00</td>\n",
" <td>900.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>黑豆</td>\n",
" <td>平旱地</td>\n",
" <td>单季</td>\n",
" <td>500</td>\n",
" <td>400</td>\n",
" <td>6.50-8.50</td>\n",
" <td>3350.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>红豆</td>\n",
" <td>平旱地</td>\n",
" <td>单季</td>\n",
" <td>400</td>\n",
" <td>350</td>\n",
" <td>7.50-9.00</td>\n",
" <td>2950.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>绿豆</td>\n",
" <td>平旱地</td>\n",
" <td>单季</td>\n",
" <td>350</td>\n",
" <td>350</td>\n",
" <td>6.00-8.00</td>\n",
" <td>2100.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>5</td>\n",
" <td>爬豆</td>\n",
" <td>平旱地</td>\n",
" <td>单季</td>\n",
" <td>415</td>\n",
" <td>350</td>\n",
" <td>6.00-7.50</td>\n",
" <td>2451.25</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>120</th>\n",
" <td>103</td>\n",
" <td>30</td>\n",
" <td>生菜</td>\n",
" <td>智慧大棚</td>\n",
" <td>第二季</td>\n",
" <td>4500</td>\n",
" <td>2200</td>\n",
" <td>5.40-7.20</td>\n",
" <td>26150.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>121</th>\n",
" <td>104</td>\n",
" <td>31</td>\n",
" <td>辣椒</td>\n",
" <td>智慧大棚</td>\n",
" <td>第二季</td>\n",
" <td>1800</td>\n",
" <td>1300</td>\n",
" <td>7.20-10.20</td>\n",
" <td>14360.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>122</th>\n",
" <td>105</td>\n",
" <td>32</td>\n",
" <td>空心菜</td>\n",
" <td>智慧大棚</td>\n",
" <td>第二季</td>\n",
" <td>11000</td>\n",
" <td>5500</td>\n",
" <td>3.60-7.20</td>\n",
" <td>53900.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>123</th>\n",
" <td>106</td>\n",
" <td>33</td>\n",
" <td>黄心菜</td>\n",
" <td>智慧大棚</td>\n",
" <td>第二季</td>\n",
" <td>5400</td>\n",
" <td>2750</td>\n",
" <td>4.80-6.00</td>\n",
" <td>26410.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>124</th>\n",
" <td>107</td>\n",
" <td>34</td>\n",
" <td>芹菜</td>\n",
" <td>智慧大棚</td>\n",
" <td>第二季</td>\n",
" <td>6000</td>\n",
" <td>1200</td>\n",
" <td>3.80-5.80</td>\n",
" <td>27600.00</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>125 rows × 9 columns</p>\n",
"</div>"
]
},
2024-09-07 07:45:25 +00:00
"execution_count": 5,
2024-09-07 06:22:58 +00:00
"metadata": {},
"output_type": "execute_result"
}
],
2024-09-07 07:45:25 +00:00
"execution_count": 5
2024-09-07 06:22:58 +00:00
},
{
"metadata": {
"ExecuteTime": {
2024-09-07 07:45:25 +00:00
"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"
2024-09-07 06:22:58 +00:00
}
},
"cell_type": "code",
"source": [
"# 枚举地块类型\n",
"LandType = {\"A\": \"平旱地\", \"B\": \"梯田\", \"C\": \"山坡地\", \"D\": \"水浇地\", \"E\": \"普通大棚\", \"F\": \"智慧大棚\"}\n",
2024-09-07 07:45:25 +00:00
"# LandType"
2024-09-07 06:22:58 +00:00
],
"id": "4a4e06a1f2d4d8ab",
2024-09-07 07:45:25 +00:00
"outputs": [],
"execution_count": 7
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2024-09-07T07:39:54.061240Z",
"start_time": "2024-09-07T07:39:54.045394Z"
2024-09-07 06:22:58 +00:00
}
2024-09-07 07:45:25 +00:00
},
"cell_type": "code",
"source": [
"# 枚举地块\n",
"LandName = df_crop_planting['landName'].unique()\n",
"# LandName"
2024-09-07 06:22:58 +00:00
],
2024-09-07 07:45:25 +00:00
"id": "cc938565a63a8129",
"outputs": [],
"execution_count": 8
2024-09-07 06:22:58 +00:00
},
{
"metadata": {
"ExecuteTime": {
2024-09-07 07:45:25 +00:00
"end_time": "2024-09-07T07:39:54.076622Z",
"start_time": "2024-09-07T07:39:54.062582Z"
2024-09-07 06:22:58 +00:00
}
},
"cell_type": "code",
"source": [
"# 读入作物名称\n",
"CropName = df_crop_details['cropName'].unique()\n",
2024-09-07 07:45:25 +00:00
"# CropName"
2024-09-07 06:22:58 +00:00
],
"id": "7a0e6cc209d93b56",
2024-09-07 07:45:25 +00:00
"outputs": [],
"execution_count": 9
2024-09-07 06:22:58 +00:00
},
{
"metadata": {
"ExecuteTime": {
2024-09-07 07:45:25 +00:00
"end_time": "2024-09-07T07:39:54.092071Z",
"start_time": "2024-09-07T07:39:54.081006Z"
2024-09-07 06:22:58 +00:00
}
},
"cell_type": "code",
"source": [
"any([x[-1] == ' ' for x in CropName])\n",
"# 居然有空格\n",
"# 现在去掉了"
],
"id": "bf6d61d66f06bdeb",
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
2024-09-07 07:45:25 +00:00
"execution_count": 10,
2024-09-07 06:22:58 +00:00
"metadata": {},
"output_type": "execute_result"
}
],
2024-09-07 07:45:25 +00:00
"execution_count": 10
2024-09-07 06:22:58 +00:00
},
{
"metadata": {
"ExecuteTime": {
2024-09-07 07:45:25 +00:00
"end_time": "2024-09-07T07:39:54.491091Z",
"start_time": "2024-09-07T07:39:54.093999Z"
2024-09-07 06:22:58 +00:00
}
},
"cell_type": "code",
"source": [
"# 亩产量\n",
2024-09-07 07:45:25 +00:00
"unit_yield_lsc = {\n",
2024-09-07 06:22:58 +00:00
" l: {\n",
2024-09-07 07:45:25 +00:00
" 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",
2024-09-07 06:22:58 +00:00
" }\n",
" for l in LandType.values()\n",
"}\n",
"\n",
2024-09-07 07:45:25 +00:00
"# unit_yield"
2024-09-07 06:22:58 +00:00
],
"id": "22f9730e3d9c1016",
2024-09-07 07:45:25 +00:00
"outputs": [],
"execution_count": 11
2024-09-07 06:22:58 +00:00
},
{
"metadata": {
"ExecuteTime": {
2024-09-07 07:45:25 +00:00
"end_time": "2024-09-07T07:39:54.993663Z",
"start_time": "2024-09-07T07:39:54.493875Z"
2024-09-07 06:22:58 +00:00
}
},
"cell_type": "code",
"source": [
"# 亩利润\n",
2024-09-07 07:45:25 +00:00
"unit_profit_lsc = {\n",
2024-09-07 06:22:58 +00:00
" l: {\n",
2024-09-07 07:45:25 +00:00
" 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",
2024-09-07 06:22:58 +00:00
" }\n",
" for l in LandType.values()\n",
"}\n",
"\n",
2024-09-07 07:45:25 +00:00
"# unit_profit"
2024-09-07 06:22:58 +00:00
],
"id": "99dbe4ca6c54db0b",
2024-09-07 07:45:25 +00:00
"outputs": [],
"execution_count": 12
2024-09-07 06:22:58 +00:00
},
{
"metadata": {
"ExecuteTime": {
2024-09-07 07:45:25 +00:00
"end_time": "2024-09-07T07:39:55.009266Z",
"start_time": "2024-09-07T07:39:54.993663Z"
2024-09-07 06:22:58 +00:00
}
},
"cell_type": "code",
"source": [
"# 每种作物的总需求\n",
"crop_demand = {\n",
" c: 0\n",
" for c in CropName\n",
"}\n",
"\n",
"# 这里需要另一张表\n",
2024-09-07 07:45:25 +00:00
"# 代码独立出来移到上面去了\n",
"\n",
2024-09-07 06:22:58 +00:00
"for line in df_crop_planting.values:\n",
2024-09-07 07:45:25 +00:00
" # 面积*该土地类型的亩产量 面积 地块类型字典 地块类型 季节 作物名称\n",
" crop_demand[line[2]] += line[4] * unit_yield_lsc[LandType[line[0][0]]][line[5]][line[2]]\n",
2024-09-07 06:22:58 +00:00
"\n",
2024-09-07 07:45:25 +00:00
"# crop_demand"
2024-09-07 06:22:58 +00:00
],
"id": "13f2ccc7aa215d4c",
2024-09-07 07:45:25 +00:00
"outputs": [],
"execution_count": 13
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2024-09-07T07:39:55.056963Z",
"start_time": "2024-09-07T07:39:55.009266Z"
2024-09-07 06:22:58 +00:00
}
2024-09-07 07:45:25 +00:00
},
"cell_type": "code",
"source": [
"# 准备开搞\n",
"from pulp import LpMaximize, LpProblem, LpVariable, lpSum, value, LpInteger, PULP_CBC_CMD, LpContinuous, LpBinary\n"
2024-09-07 06:22:58 +00:00
],
2024-09-07 07:45:25 +00:00
"id": "5d09872708d40da4",
"outputs": [],
"execution_count": 14
},
{
"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": 15
2024-09-07 06:22:58 +00:00
},
{
"metadata": {
"ExecuteTime": {
2024-09-07 07:45:25 +00:00
"end_time": "2024-09-07T07:39:55.088872Z",
"start_time": "2024-09-07T07:39:55.075153Z"
2024-09-07 06:22:58 +00:00
}
},
"cell_type": "code",
"source": [
2024-09-07 07:45:25 +00:00
"# %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)"
2024-09-07 06:22:58 +00:00
],
2024-09-07 07:45:25 +00:00
"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",
2024-09-07 06:22:58 +00:00
"outputs": [],
2024-09-07 07:45:25 +00:00
"execution_count": 18
2024-09-07 06:22:58 +00:00
},
{
2024-09-07 07:45:25 +00:00
"metadata": {
"ExecuteTime": {
"end_time": "2024-09-07T07:39:57.605199Z",
"start_time": "2024-09-07T07:39:55.697108Z"
}
},
2024-09-07 06:22:58 +00:00
"cell_type": "code",
2024-09-07 07:45:25 +00:00
"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",
2024-09-07 06:22:58 +00:00
"outputs": [],
2024-09-07 07:45:25 +00:00
"execution_count": null
2024-09-07 06:22:58 +00:00
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}