diff --git a/农作物种植策略/solve/solve.py b/农作物种植策略/solve/solve.py new file mode 100644 index 0000000..3409239 --- /dev/null +++ b/农作物种植策略/solve/solve.py @@ -0,0 +1,104 @@ +import pulp as pl +import pandas as pd +from itertools import product + +df1 = pd.read_excel (io='附件1.xlsx', sheet_name = "乡村的现有耕地") +df2 = pd.read_excel (io='附件2.xlsx', sheet_name = "2023年的农作物种植情况").fillna(method='ffill') +df3 = pd.read_excel (io='附件2.xlsx', sheet_name = "2023年统计的相关数据") + +trans_dict = {"A": "平原地", "B": "林地", "C": "山坡地", "D": "水浇地", "E": "普通大棚", "F": "智能大棚"} +# 地块定义 +A = ["A"+str(i) for i in range(1,7)] +B = ["B"+str(i) for i in range(1,15)] +C = ["C"+str(i) for i in range(1,7)] +D = ["D"+str(i) for i in range(1,9)] +E = ["E"+str(i) for i in range(1,17)] +F = ["F"+str(i) for i in range(1,5)] + +# 作物定义 +# 粮食(豆类) +LDN = ["黄豆", "黑豆", "红豆", "绿豆", "爬豆"] +LDI = list(range(1, 6)) + +# 粮食 +LN = ["小麦", "玉米", "谷子", "高粱", "黍子", "荞麦", "南瓜", "红薯", "莜麦", "大麦"] +LI = list(range(6, 16)) + +# 水稻类 +LSN = ["水稻"] +LSI = list(range(16, 17)) + +# 蔬菜(豆类) +SDN = ["豇豆", "刀豆", "芸豆"] +SDI = list(range(17, 20)) + +# 蔬菜水浇地第一季 +SN = ["土豆", "西红柿", "茄子", "菠菜", "青椒", "菜花", "包菜", "油麦菜", "小青菜", + "黄瓜", "生菜", "辣椒", "空心菜", "黄心菜", "芹菜"] +SI = list(range(20, 35)) + +# 蔬菜水浇地第二季 +SAN = ["大白菜", "白萝卜", "红萝卜"] +SAI = list(range(35, 38)) + +# 食用菌普通大棚第二季 +SYJN = ["榆黄菇", "香菇", "白灵菇", "羊肚菌"] +SYJI = list(range(38, 42)) + +K = [1,2] # 季 +Y = [y for y in range(2024,2031)] # 年 +I = A + B + C + D + E + F # 全部地块 +J = LDN + LN + LSN + SDN + SN + SAN + SYJN # 所有作物 + +V_1 = list(product(A + B + C, LDI + LI, [K[0]], Y)) +V_2 = list(product(D, LSI, [K[0]], Y)) +V_3 = list(product(D + E + F, SDI + SI, [K[0]], Y)) +V_4 = list(product(F, SDI + SI, [K[1]], Y)) +V_5 = list(product(D, SAI, [K[1]], Y)) +V_6 = list(product(E, SYJI, [K[1]], Y)) + +V = V_1 + V_2 + V_3 + V_4 + V_5 + V_6 + +W1 = product(A + B + C + D + E + F, [K[0]], Y) # 第一季 +W2 = product(D + E + F, [K[1]], Y) # 第二季 +W = list(W1) + list(W2) + +# 数据 +# 从地块名称转到序号 +I2N = {"A": "平旱地", "B": "梯田", "C": "山坡地", "D": "水浇地", "E": "普通大棚", "F": "智慧大棚"} +N2I = {"平旱地": A, "梯田": B, "山坡地": C, "水浇地": D, "普通大棚": E, "智慧大棚": F} +q = {(I2N[df2["种植地块"][i]], df2["作物编号"][i], + K[1] if df2["种植季次"][i] == "第二季" else K[0]): + df3["种植成本/(元/亩)"][i] + for i in range(len(df2))} + +def get_data(name:str): + return {(df3["地块类型"][i].strip(), df3["作物编号"][i], + K[1] if df3["种植季次"][i] == "第二季" else K[0]): + df3[name][i] + for i in range(len(df3))} + +r = get_data("亩产量/斤") +c = get_data("种植成本/(元/亩)") +p = get_data("销售单价/(元/斤)") + + +# 问题求解 +problem = pl.LpProblem("Agricultural Planting",sense=pl.LpMinimize) + +x = pl.Dict([V,Y]) +y = pl.LpVariable("y") +z = y > x + +problem += min([x,y,z]) +for var in vars: + problem += (x+y > 8) + problem += (x+y+z > 13) + problem += (x+z > 7) + +problem.solve() + + +for v in problem.variables(): + print(v.name,"=",v.varValue) +print(pl.value(problem.objective)) \ No newline at end of file diff --git a/随机模型/main.md b/随机模型/main.md new file mode 100644 index 0000000..bd1fac5 --- /dev/null +++ b/随机模型/main.md @@ -0,0 +1,101 @@ +# 随机模型 + +## 第一题 + +### 1.1 + +旧赛制进球数概率 + +| | 0 | 1 | 2 | +| ------ | --------- | --------- | ----- | +| 先 $X$ | $(1-p)^2$ | $2p(1-p)$ | $p^2$ | +| 后 $Y$ | $(1-q)^2$ | $2q(1-q)$ | $q^2$ | + +$P\{先手胜\}=P\{X>Y\}=2p^2q(1-q)+2(1-q)^2p(1-p)+p^2(1-q)^2=(1-q)p[2pq+2(1-p)(1-q)+p(1-q)]$ + +$P\{后手胜\}=P\{XY\}=p(1-p)[q^2+(1-q)^2]+q(1-q)[p^2+(1-p)^2]+pq(1-p)(1-q)$ + +$P\{后手胜\}=P\{X