使用 Python3 实现博弈树分析器 找最优得益及对应策略

已知问题

1.同一个父节点的策略组合的情况下,如果出现了判断博弈人的得益时出现了多个得益中对应位置的值均相等的情况,自动取其中一个得益作为父节点的最佳得益。

2.没有考虑如下情况:第一个参与人X有多个选择时,若选择了A作为策略时,则下一个博弈人为Y;若选择了B作为策略时,则下一个博弈人为Z

没有博弈树的绘制。

实验代码

import re
import itertools
import numpy as np

Order = input('输入参与博弈的多个参与人进行决策的顺序(以逗号分隔):')  # 输入参与人的决策次序
Order = re.split('[,,]', Order)  # 按逗号分开
Players = []  # 参加博弈的参与人列表
for item in Order:  # 遍历决策次序集
    if item not in Players:  # 将参与人的名称不重复地加入到参与人列表中
        Players.append(item)
print('参与博弈的参与人:', Players)  # 输出所有参与人
print('博弈的决策的顺序:', Order)  # 输出参与人的决策顺序

DecisionSet = []  # 总策略集
DecisionCount = []  # 各参与人的决策个数列表
for i in Order:  # 按照决策次序,输入各参与人的策略并形成策略集
    SubDecisionSet = input('参与人 {0} 的策略(以逗号分隔):'.format(i))  # 参与人i的策略
    SubDecisionSet = re.split('[,,]', SubDecisionSet)  # 按逗号分开
    DecisionSet.append(SubDecisionSet)  # 将各参与人的策略集加入到总策略集中
    DecisionCount.append(len(SubDecisionSet))  # 将各参与人的决策个数加入到决策个数列表中

TDSets = list(itertools.product(*DecisionSet, repeat=1))  # 将各策略集中的策略进行排列组合
TreeDecisionSet = []  # 策略组合集
for item in TDSets:  # 将排列组合完成的策略数据格式转化为列表
    TreeDecisionSet.append(list(item))
print('生成的博弈树中所有的策略组合:')
for i in range(len(TreeDecisionSet)):  # 输出带编号的所有策略组合
    print(i + 1, TreeDecisionSet[i])


def Copy(List):
    NewList = []
    for item in List:
        NewList.append(item)
    return NewList


def DeleteDecision(DataSet, IndexSet):
    # 读取
    InnerDataSet = Copy(DataSet)
    DelDecSet = []  # 待删除策略的集合
    DelDecIndexSet = []  # 待删除策略的位置
    for i in range(len(InnerDataSet)):
        if i + 1 in IndexSet:  # 删除序号在总策略序号集中
            del InnerDataSet[i][-1]  # 将待删除策略的最后一个策略删除,作为删除项的标记
            DelDecSet.append(InnerDataSet[i])  # 将待删除策略加入删除策略集合
            Del
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值