本文目录导读:

在Python中结合“士气指数”做决策,通常用于模拟复杂的系统(如团队管理、游戏AI或公司运营),其中非金钱或非纯理性的因素(如团队情绪、激励程度)会影响最终结果。
核心思路是:将士气指数作为一个动态的权重或概率调节器,影响决策的成本、收益或成功率。
下面提供几种典型的结合案例,从简单到复杂,并配有代码示例。
案例 1:量化决策权衡(加权评分法)
场景:项目经理需要决定是“加班赶工”还是“正常推进”,单纯考虑进度(收益)是加班好,但士气指数低时,加班会导致未来效率下降或人员流失。
实现:决策函数返回一个“综合得分”,其中士气指数作为调节因子。
# 士气指数范围 0-100
morale = 65
def evaluate_decision(option_name, speed_gain, moral_cost, morale):
"""
评估决策的综合效用
"""
# 基础收益:速度带来的进度
base = speed_gain
# 士气成本:如果士气低,成本放大;士气高,成本缩小
# 成本权重与士气成反比
morale_penalty = moral_cost * (100 / max(morale, 1))
# 最终得分 = 收益 - 士气惩罚
score = base - morale_penalty
print(f"{option_name}: 基础收益={base:.1f}, 士气惩罚={morale_penalty:.1f}, 综合得分={score:.1f}")
return score
# 两种决策方案
options = [
{"name": "加班赶工", "speed_gain": 80, "moral_cost": 50},
{"name": "正常推进", "speed_gain": 50, "moral_cost": 10}
]
# 当前士气
current_morale = 35 # 士气很低
best_option = max(options, key=lambda opt: evaluate_decision(opt["name"], opt["speed_gain"], opt["moral_cost"], current_morale))
print(f"\n✅ 推荐决策: {best_option['name']}")
结果分析:当士气很低时,“加班赶工”的士气惩罚巨大,综合得分反而低于“正常推进”,AI系统会选择后者。
案例 2:概率型决策(蒙地卡罗模拟)
场景:游戏或战场模拟,一个士兵/小队的士气指数决定了它“成功执行高风险指令”的概率。
实现:基于士气指数生成一个随机概率,高于阈值则冒险行动,否则采取保守策略。
import random
def make_combat_decision(morale):
"""
基于士气做出战斗决策
"""
# 士气越低,决策越偏向保守
# 士气 > 70 才会考虑突击等高风险动作
if morale > 70:
# 士气高:有 80% 概率选择冲锋(高收益高风险)
if random.random() < 0.8:
return "选择冲锋 🚀 (高收益风险大)"
else:
return "选择稳扎稳打 🛡️ (中等收益)"
elif morale > 40:
# 士气中等:优先选择防守反击
if random.random() < 0.6:
return "选择防守反击 ⚔️ (中等收益)"
else:
return "选择撤退准备 🏃 (低收益安全)"
else:
# 士气低:大概率选择撤退或休整
if random.random() < 0.8:
return "选择撤退或防御 🛑 (无收益,避免损失)"
else:
return "选择拼死一搏 💀 (低成功率)"
# 模拟多次决策
for morale_value in [20, 50, 85]:
print(f"\n士气指数: {morale_value}")
for _ in range(3):
decision = make_combat_decision(morale_value)
print(f" -> {decision}")
结果分析:通过随机数,士气指数决定了行动选择的概率分布,符合“士气低落时更保守”的现实逻辑。
案例 3:动态系统模拟(反馈循环)
场景:公司或组织根据连续决策调整士气,而士气又反过来影响后续决策的效果。
实现:创建一个 Organization 类,其士气根据决策结果动态变化。
class Organization:
def __init__(self, morale=60):
self.morale = morale
self.productivity = 1.0
def update_morale(self, delta):
self.morale = max(0, min(100, self.morale + delta))
# 士气影响生产率:士气每降低 10 点,生产率下降 5%
self.productivity = 0.5 + (self.morale / 100) * 0.5
print(f" 士气更新: {self.morale:.0f}, 当前生产率: {self.productivity:.2f}")
def make_decision(self):
# 士气高才尝试创新,士气低只能维持
if self.morale > 60:
# 决策:创新 (收益高但风险大)
success = random.random() < 0.7 # 70%成功率
if success:
self.update_morale(10) # 成功提升士气
return f"创新成功 🎉 (收益+20%), 士气+10"
else:
self.update_morale(-15) # 失败大幅打击士气
return f"创新失败 💥 (损失-5%), 士气-15"
else:
# 决策:保守运营(稳定但低收益)
self.update_morale(2) # 稳定增长一点士气
return f"保守运营 📈 (收益+3%), 士气+2"
# 模拟10轮决策
org = Organization(morale=55)
print("开始模拟...")
for round_num in range(10):
print(f"\n回合 {round_num+1} (当前士气: {org.morale:.0f}, 生产率: {org.productivity:.2f})")
result = org.make_decision()
print(f" 结果: {result}")
# 根据生产率计算最终收益
revenue = 100 * org.productivity
print(f" 本轮收益: {revenue:.1f}")
结果分析:这个循环展示了士气如何与决策、结果相互影响,初始士气低时,不敢冒险,虽然稳定但收益低;当士气因保守积累到高位,系统尝试创新,可能形成正向或负向螺旋。
在实际项目中,你可以使用以下通用公式来抽象“士气指数”的影响:
| 公式类型 | 解释 | 示例 |
|---|---|---|
| 权重调节 | 最终得分 = 收益 × 士气权重 - 成本 × (1/士气权重) |
士气高时收益权重增加 |
| 概率阈值 | 成功概率 = 基础概率 × (士气/100) |
士气60时,成功率是基础值的60% |
| 反馈循环 | 新士气 = 当前士气 + 决策结果影响 ± 衰减因子 |
士气随时间自然衰减,成功事件增加 |
| 决策树分支 | if morale > threshold: action_A else action_B |
阈值化决策 |
应用到实际项目的步骤
- 定义士气指数:确定取值范围(如0-100)、初始值是什么、更新规则(哪些事件增减士气、是否有自然衰减)。
- 建立映射关系:决定士气影响哪些决策参数(成功率、收益率、人员流失风险等)。
- 实现决策引擎:在每次需要决策时,调用包含士气参数的计算函数。
- 可视化监控:利用
matplotlib将士气变化和决策结果绘制成折线图,直观分析动态过程(例如士气崩溃点)。
进阶技巧:可以加入噪声(随机波动)和滞后效应(士气变化需要时间影响决策),让模型更逼真。