Python案例如何结合士气指数做决策?

wen python案例 1

本文目录导读:

Python案例如何结合士气指数做决策?

  1. 案例 1:量化决策权衡(加权评分法)
  2. 案例 2:概率型决策(蒙地卡罗模拟)
  3. 案例 3:动态系统模拟(反馈循环)
  4. 应用到实际项目的步骤

在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 阈值化决策

应用到实际项目的步骤

  1. 定义士气指数:确定取值范围(如0-100)、初始值是什么、更新规则(哪些事件增减士气、是否有自然衰减)。
  2. 建立映射关系:决定士气影响哪些决策参数(成功率、收益率、人员流失风险等)。
  3. 实现决策引擎:在每次需要决策时,调用包含士气参数的计算函数。
  4. 可视化监控:利用 matplotlib 将士气变化和决策结果绘制成折线图,直观分析动态过程(例如士气崩溃点)。

进阶技巧:可以加入噪声(随机波动)和滞后效应(士气变化需要时间影响决策),让模型更逼真。

抱歉,评论功能暂时关闭!