import pandas as pd
import numpy as np
import random
import re
# 读取作物耕地信息
filename = '附件1-2.xlsx'
CLD = pd.read_excel(filename)
# 初始化列表,用于存储处理后的数据
LTA, SA, CUD, CNA, CTA = [], [], [], [], []
# 遍历作物耕地数据,提取并处理地块类型和季节信息
for i in range(len(CLD)):
asdaw = str(CLD.iloc[i]['种植耕地']).replace('↵', '').strip()
if asdaw:
tokens = re.findall(r'(\S+)\s+(\S+)', asdaw) # 使用正则表达式提取地块类型和季节
for LT, season in tokens:
seasons = season.split()
for dwa in seasons:
CUD.append(CLD.iloc[i]['作物编号'])
CNA.append(CLD.iloc[i]['作物名称'])
CTA.append(CLD.iloc[i]['作物类型'])
LTA.append(LT)
SA.append(dwa)
# 将处理后的数据转换为DataFrame
adwddaw = pd.DataFrame({
'作物编号': CUD,
'作物名称': CNA,
'作物类型': CTA,
'地块类型': LTA,
'季节': SA
})
# 将处理后的数据保存到Excel文件
adwddaw.to_excel('分解后的作物地块和季节信息.xlsx', index=False)
# 定义函数,根据地块信息、作物数据等计算最佳作物
def find_best_crop(SC, CD, PA, ESF, MPA):
BR = -float('inf')
BCI = 0
for CI in range(len(SC)):
CN = SC.iloc[CI]['作物名称']
CDF = CD[CD['作物名称'] == CN]
if notCDF.empty:
dawsd =CDF.iloc[0]['亩产量/斤']
asdaw =CDF.iloc[0]['销售单价/(元/斤)']
cost =CDF.iloc[0]['种植成本/(元/亩)']
adasdaw = dawsd * PA
sdwer = ESF * adasdaw
wdwtrt = max(0, adasdaw - sdwer)
daswgffa = min(adasdaw, sdwer)
revenue = daswgffa * asdaw +wdwtrt * (asdaw * 0.5) - cost * PA
if revenue > BR and PA >= MPA:
BR = revenue
BCI = CD.index[CD['作物名称'] == CN][0]
return BCI, BR
# 读取地块信息
LF = '附件1-1.xlsx'
LD = pd.read_excel(LF)
# 定义地块类型
LTS= ['普通大棚', '智慧大棚', '平旱地', '梯田', '山坡地', '水浇地']
PI = pd.DataFrame()
# 提取每种地块类型的信息
for LT in LTS:
names = LD[LD['地块类型'] == LT]['地块名称']
areas = LD[LD['地块类型'] == LT]['地块面积']
temp_df = pd.DataFrame({'种植地块': names, '地块类型': LT, '地块面积': areas})
PI = pd.concat([PI, temp_df])
# 导入2023年种植数据
dxvacwf = '附件2-1导入.xlsx'
xcxassdaw = pd.read_excel(dxvacwf)
# 将地块信息与种植计划数据合并
xcxassdaw = pd.merge(xcxassdaw, PI, on='种植地块', how='left')
# 读取清洗后的作物数据
crop_filename = '附件2-2清洗后数据.xlsx'
CD = pd.read_excel(crop_filename)
# 导入和处理作物-土地适用数据
filename = '附件1-2.xlsx'
CLD = pd.read_excel(filename)
# 分解作物适用地块和季节
LTA, SA, CUD, CNA, CTA = [], [], [], [], []
for i in range(len(CLD)):
asdaw = str(CLD.iloc[i]['种植耕地']).replace('↵', '').strip()
if asdaw:
tokens = re.findall(r'(\S+)\s+(\S+)', asdaw)
for LT, season in tokens:
seasons = season.split()
for dwa in seasons:
CUD.append(CLD.iloc[i]['作物编号'])
CNA.append(CLD.iloc[i]['作物名称'])
CTA.append(CLD.iloc[i]['作物类型'])
LTA.append(LT)
SA.append(dwa)
adwddaw = pd.DataFrame({
'作物编号': CUD,
'作物名称': CNA,
'作物类型': CTA,
'地块类型': LTA,
'季节': SA
})
# 导出结果
adwddaw.to_excel('分解后的作物地块和季节信息.xlsx', index=False)
# 豆科植物列表
legume_crops = ['黄豆', '豇豆', '芸豆', '红豆', '黑豆', '绿豆', '爬豆', '刀豆']
# 谷物作物列表
xadss = ['小麦', '玉米']
# 蔬菜作物列表
daw = ['白菜', '生菜', '菠菜', '番茄']
# 真菌类作物列表
fungi_crops = ['蘑菇', '羊肚菌']
# 根据作物名称和年份调整销售、产量、成本和价格
def adjust_parameters(CN, year, swdwr, sdwdwe, wewe, xdwasdw):
# 调整预期销售量
if CN in xadss:
sales_growth_rate = random.uniform(0.05, 0.10) # 小麦和玉米的增长率 5%~10%
sales = swdwr * (1 + sales_growth_rate) ** (year - 2023)
else:
sales_change_rate = random.uniform(-0.05, 0.05) # 其他作物 ±5% 的变化
sales = swdwr * (1 + sales_change_rate)
# 调整亩产量(所有作物±10%波动)
yield_change_rate = random.uniform(-0.10, 0.10)
dawsd = sdwdwe * (1 + yield_change_rate)
# 调整种植成本(每年增长5%)
cost = wewe * (1 + 0.05) ** (year - 2023)
# 调整销售价格
if CN in xadss:
price = xdwasdw # 粮食类价格稳定
elif CN in daw:
price = xdwasdw * (1 + 0.05) ** (year - 2023) # 蔬菜类每年增长5%
elif CN == '羊肚菌':
price = xdwasdw * (1 - 0.05) ** (year - 2023) # 羊肚菌每年下降5%
elif CN in sd:
price = xdwasdw * random.uniform(0.95, 0.99) # 其他食用菌每年下降1%~5%
else:
price = xdwasdw # 其他作物价格稳定
return sales, dawsd, cost, price
# 找到最适合种植的作物
def find_best_crop(SC, CD, PA, year, ESF, MPA):
BR = -float('inf')
BCI = 0
# 遍历每个作物,计算收益
for CI in range(len(SC)):
CN = SC.iloc[CI]['作物名称']
CDF = CD[CD['作物名称'] == CN]
if notCDF.empty:
# 获取基础数据
swdwr =CDF.iloc[0]['亩产量/斤']
sdwdwe =CDF.iloc[0]['亩产量/斤']
wewe =CDF.iloc[0]['种植成本/(元/亩)']
xdwasdw =CDF.iloc[0]['销售单价/(元/斤)']
# 调整参数
sales, dawsd, cost, price = adjust_parameters(CN, year, swdwr, sdwdwe, wewe,xdwasdw)
# 计算总产量和预期销售量
adasdaw = dawsd * PA
sdwer = ESF * adasdaw
# 计算超出部分的产量
wdwtrt = max(0, adasdaw - sdwer)
daswgffa = min(adasdaw, sdwer)
# 收益 = 正常销售的部分 + 降价后的超出部分
revenue = daswgffa * price +wdwtrt * (price * 0.5) - cost * PA
# 确保逻辑条件是标量
if revenue > BR and PA >= MPA:
BR = revenue
BCI = CD.index[CD['作物名称'] == CN][0]
return BCI, BR
# 定义年份列表
years = list(range(2024, 2031))
tyt = len(years) # 计算年份数量
# 从 PI DataFrame 中获取地块名称和地块面积
yfgr = PI['种植地块'].values
PAs = PI['地块面积'].values
terwe = len(yfgr) # 计算地块数量
# 假设 CD DataFrame 包含所有作物的信息,计算作物种类数量
tuyu= len(CD)
# 初始化参数
ESF = 0.8
MPA = 0.1
awerwr = np.empty((terwe, tyt), dtype=object) # 记录每个地块每年种植的作物
hfgf = np.zeros(terwe) # 记录每个地块最后一次种植豆类的年份
# 初始化用于存储每年种植方案的列表
yearly_plans = []
# 遍历每个年份
for year_idx in range(tyt):
print(f"正在处理年份:{years[year_idx]}") # 打印当前处理的年份
# 初始化当前年份的第一季和第二季种植方案矩阵
adw1 = np.zeros((terwe, num_crops))
adwe1 = np.zeros((terwe, num_crops))
# 遍历每个地块
for qwedqw2 in range(terwe):
plot_name = yfgr[qwedqw2] # 地块名称
PA = PAs[qwedqw2] # 地块面积
# 根据地块类型筛选适用的作物
wedw = adwddaw[adwddaw['地块类型'] == PI.iloc[qwedqw2]['地块类型']]
# 避免�
没有合适的资源?快使用搜索试试~ 我知道了~
onLinear Programming and Monte Carlo Simulation
共14个文件
m:7个
xlsx:3个
py:2个
需积分: 0 1 下载量 135 浏览量
2024-10-16
16:42:27
上传
评论
收藏 229KB ZIP 举报
温馨提示
数学建模
资源推荐
资源详情
资源评论
收起资源包目录
支撑材料.zip (14个子文件)
附件
第二问代码
3-问题二.py 11KB
附件三
result1_2.xlsx 87KB
result1_1.xlsx 87KB
result2.xlsx 87KB
第三问代码
农产品聚类.fig 37KB
ketidaixing.m 2KB
可替代性.fig 19KB
julei.m 2KB
4-问题三.py 8KB
huiguixingfenxi.m 2KB
yuxian_xiangsidu.m 1KB
第一问代码
K-means.m 1KB
main_sobj.m 22KB
main_sobj1.m 15KB
共 14 条
- 1
资源评论
2302_82264763
- 粉丝: 3
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功