1.囚徒困境
囚徒困境(Prisoner’s Dilemma)是博弈论的非零和博弈中具代表性的例子,反映个人最佳选择并非团体最佳选择。或者说在一个群体中,个人做出理性选择却往往导致集体的非理性。虽然困境本身只属模型性质,但现实中的价格竞争、环境保护等方面,也会频繁出现类似情况。
1950年,由就职于兰德公司的梅里尔·弗勒德(Merrill Flood)和梅尔文·德雷希尔(Melvin Dresher)拟定出相关困境的理论,后来由顾问艾伯特·塔克(Albert Tucker)以囚徒方式阐述,并命名为“囚徒困境”。
囚徒困境是博弈论中最经典的一个问题。
2.计算机仿真
1992年Martin A. Nowak 和 Rebort M. May在Nature上发表了一篇论文Evolutionary games and spatial chaos,论文采用了一种极为简单的规则就囚徒困境做了仿真。具体内容大家可以查阅这篇文献。下面是核心代码(MATLAB实现):
% 获取个编辑框以及按钮的数值
var = get(handles.popupmenu2, 'Value');
T = get(handles.edit1, 'String');
R = get(handles.edit2, 'String');
P = get(handles.edit3, 'String');
S = get(handles.edit4, 'String');
L = get(handles.edit5, 'String');
TimeStep = get(handles.edit6, 'String');
T = str2double(T);
R = str2double(R);
P = str2double(P);
S = str2double(S);
L = str2num(L);
TimeStep = str2num(TimeStep);
% 获取初始时刻的模式:随机还是几何对称
if get(handles.Regular, 'Value');
flag = 1;
elseif get(handles.Random, 'Value')
flag = 0;
end
%获取初始格局
%CurrrentPayers是当前格局
CurrentPlayers = InitMatrix(flag, L, var);
%TempPlayers是博弈时临时存储当前格局的矩阵
TempPlayers = CurrentPlayers;
%存储策略改变信息的矩阵
Changes = zeros(L);
% Payoff记录当前格局中每个点博弈所获得的总收益(与8个邻居及自己)
%每个个体的收益初始化为0
Payoff = zeros(L);
for t = 1:TimeStep
Frequency = sum(sum(CurrentPlayers))/(L*L);
Frequency = roundn(Frequency, -3);
set(handles.