您的位置:首页 > 财经 > 金融 > 《火纹:风花雪月》种植最优化问题

《火纹:风花雪月》种植最优化问题

2024/12/23 23:46:48 来源:https://blog.csdn.net/qq_54394719/article/details/137087609  浏览:    关键词:《火纹:风花雪月》种植最优化问题

背景

最优组合问题:如何搭配背包里的种子,能够最大性价比地获取想要的属性果实

机制

本机制整理来源于贴吧、游民星空和b站。

这个视频解说会很详细《火纹:风花雪月》栽培、种植详细讲解(附作业本)_单机游戏热门视频

  1. 一次性最多可以种5个种子。
  2. 收获的产物的种类取决于种子以及种子的搭配。
  3. 收获质量受种子的隐藏值和培育等级影响。
  4. 收获数量取决于种子数量和培育等级。
  5. 收获物品会有属性果和非属性果的其他产物,但是我们只关心属性果。
  6. 种植方法培育等级
    注入魔力0
    水灌溉1
    委托苗间2
    播撒骨粉3
    铺土壤4
    天马恩惠5
  7. 收获数=5+种子数+培育等级+5(如果是大地祝福节日)
  8. 除初学者用种子,所有种子都可能培育出加属性的果实,但每个种子出的属性果不同。
  9. 不是每一种搭配都能收获属性果。
  10. 种子名称数值1数值2属性
    草本植物种子30力量
    美朵拉西方产种子90HP
    根茎植物种子10守备
    蔬菜种子90魔防
    芙朵拉北方产种子50.8魅力
    摩尔菲斯蜜李种子62.4技巧
    芙朵拉南方产种子10.8魔力
    摩尔菲斯产种子110.8技巧
    萨拉德寒冰菜种子32.4速度
    蛇果种子73.2幸运
    阿鲁比聂产种子80.8魅力
    芙朵拉东方产种子60.8守备
    白芷种子103.2力量
    果树种子80幸运
    红色花朵种子01.6魔防
    白色花朵种子51.6魅力
    蓝色花朵种子21.6HP
    紫色花朵种子41.6力量
    黄色花朵种子71.6魔力
    绿色花朵种子101.6技巧
    水蓝色花朵种子11.6速度
    初学者用种子00
  11. 属性果只会产出一个。
  12. 如果不同种子对应的属性果不是同一个,那就会从这些属性果中随机一个。
  13. 属性果的收获概率依据搭配种子的累计收获概率计算。如5个种子的收获概率都是10%,那么这种搭配组合下,能够出属性果的概率是50%。
  14. 种子的收获概率受到评价公式的影响,评价值越高,收获概率越高。
  15. 评价值=(12-(sum“数值1”÷12的余数))*5+sum“数值2”+( 培育等级+5)*2 
  16. 每个种子的收获概率有以下对应:
    评价值收获概率(%)
    0~201
    21~403
    41~605
    61~8010
    81~9015
    91~10020

根据上述规则构建代码:

import pandas as pd
import numpy as np
import pulp# 1. 输入
# 预期属性
a = '力量'
# 培育等级
L = 5# df = pd.read_csv('种子栽培.csv', header=0) #see种子栽培csv
df = pd.read_excel('./seednew.xlsx')
# user = pd.read_csv('user1.csv', header=0) #随便弄的一个用户df_bag = df.loc[df['背包个数'].replace(0,np.nan).dropna().index]df_bag_a = set(df_bag['属性'])
if a not in df_bag_a:print(f'背包里没有{a}种子')print(f'可以尝试其它属性:{df_bag_a}')
seed_num = df_bag['背包个数'].sum()
if seed_num<= 5:print('种子数较少,不需要寻优')weight_ratios = [(w,1-w) for w in [0,0.2,0.4,0.6,0.8,1]]pareto_solutions = []for main_weight,additional_weight in weight_ratios:problem = pulp.LpProblem('seed_selection',pulp.LpMaximize)x = [pulp.LpVariable(f'x{i}',lowBound=0,upBound=df_bag['背包个数'][i],cat='Integer') for i in df_bag.index]problem += pulp.lpSum([main_weight*((12-(x[ind]* df_bag['数值1'][i])/12)*5+x[ind]* df_bag['数值2'][i]+(L+5)+2) for ind,i in enumerate(df_bag.index)]) +\pulp.lpSum([x[ind]*additional_weight for ind,i in enumerate(df_bag.index) if df_bag['属性'][i]==a])problem += pulp.lpSum([x[i]for i in range(len(df_bag))])== 5#求解问题problem.solve()if pulp.LpStatus[problem.status] == 'Optimal':solution = [x[i].varValue for i in range(len(df_bag))]pareto_solutions.append((solution,pulp.value(problem.objective)))
# 输出结果
for idx,(solution,objective) in enumerate(pareto_solutions):print(f'\n搭配{idx+1}:')for ind,seed_best_num in enumerate(solution):if seed_best_num:print(f'{df_bag.iloc[ind,0]}的个数:{int(seed_best_num)}')

使用这个excel文件,可以修改自己的背包种子数,代码的a变量替换为自己想要的属性

如果用预设值优化,最终结果如下(越靠后的搭配,出指定属性的概率越高,越靠前的搭配,越容易出属性果):

搭配1:
根茎植物种子的个数:3
紫色花朵种子的个数:1
水蓝色花朵种子的个数:1

搭配2:
根茎植物种子的个数:3
紫色花朵种子的个数:1
水蓝色花朵种子的个数:1

搭配3:
根茎植物种子的个数:3
紫色花朵种子的个数:1
水蓝色花朵种子的个数:1

搭配4:
根茎植物种子的个数:3
紫色花朵种子的个数:1
水蓝色花朵种子的个数:1

搭配5:
根茎植物种子的个数:3
紫色花朵种子的个数:1
水蓝色花朵种子的个数:1

搭配6:
根茎植物种子的个数:3
紫色花朵种子的个数:1
水蓝色花朵种子的个数:1

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com