博弈论 —— matlab
目錄
1.簡介
2.算法原理
3.實例分析
1.各參數(shù)初始化
2.計算期望與實際期望
3.博弈過程
4.繪圖
?完整代碼
1.簡介
????????博弈論又被稱為對策論(Game Theory)既是現(xiàn)代數(shù)學的一個新分支,也是運籌學的一個重要學科。
????????博弈論主要研究公式化了的激勵結構間的相互作用。是研究具有斗爭或競爭性質現(xiàn)象的數(shù)學理論和方法。 博弈論考慮游戲中的個體的預測行為和實際行為,并研究它們的優(yōu)化策略。生物學家使用博弈理論來理解和預測進化論的某些結果。
????????博弈論已經(jīng)成為經(jīng)濟學的標準分析工具之一。在生物學、經(jīng)濟學、國際關系、計算機科學、政治學、軍事戰(zhàn)略和其他很多學科都有廣泛的應用。
????????基本概念中包括局中人、行動、信息、策略、收益、均衡和結果等。其中局中人、策略和收益是最基本要素。局中人、行動和結果被統(tǒng)稱為博弈規(guī)則。
????????博弈論簡單講就是,A采取措施影響B(tài)的行為,B的行為影響A的決策,兩者來回博弈,最終達到一個動態(tài)平衡。博弈論嚴格來講只是一種解題方式。
2.算法原理
????????以電動出租車與換電站為例,假設電動出租車及換電站均屬于同一家公司,公司想通過換電站價格定價措施去控制目標區(qū)域內(nèi)的出租車數(shù)量達到預期分布。
????????對于司機而言,有兩個成本,一個是距離成本d,一個是支付成本p,支付成本即是換電池所支付的電價,我們可以設立權重因子a將兩者合并構建為一個效用函數(shù),司機會選擇該函數(shù)最小的換電站更換電池,更換電池后司機一般會在周圍開始接單
????????對于公司而言,目標函數(shù)則是不同地區(qū)的出租車實際分布e與期望分布E的絕對差之和,公司通過調整價格去影響司機的選擇,從而調整司機在不同區(qū)域的分布
雙層博弈論的模型分析
①第一階段,充電站統(tǒng)計出各電動出租車的換電請求后,根據(jù)優(yōu)化目標,制定價格策略
②第二階段,電動出租車根據(jù)自身效用函數(shù)從所有換電站中選擇出目標換電站進行跟換電池
③第一階段和第二階段交替往復進行,直到達到均衡
算法設計步驟
3.實例分析
1.各參數(shù)初始化
n=900;%換電需求數(shù) min_price=170;%換電價格范圍 max_price=230; A=normrnd(36,5,1,25);%初始期望,平均值為36,方差為5的高斯分布 E=fix(A); %朝0方向取整,如,4.1,4.5,4.8取整都是4 %下面是根據(jù)需求數(shù)調整E的大小 a=sum(E)-n; A=A-a/25; E=fix(A); b=sum(E)-n; A=A-b/25; E=fix(A); a1=0.05;a2=0.95;%距離成本與換點價格權重 x=rand(n,1).*20000;%初始化需求車輛位置 y=rand(n,1).*20000; H=[2,2;2,6;2,10;2,14;2,18%初始化換電站位置 6,2;6,6;6,10;6,14;6,18 10,2;10,6;10,10;10,14;10,18 14,2;14,6;14,10;14,14;14,18 18,2;18,6;18,10;18,14;18,18].*1000; %繪制初始化的司機與換電站的位置圖 figure plot(x,y,'r*') hold on plot(H(:,1),H(:,2),'bo') legend('司機','換電站') title('初始位置圖')返回:
2.計算期望與實際期望
%% 計算期望與實際期望 D=[];%需求車輛到各換電站的需求比例 price=200.*ones(1,25); for i=1:length(H)for j=1:length(x)D(i,j)=a1*sqrt((H(i,1)-x(j))^2+(H(i,2)-y(j))^2)+a2*price(i);%總費用end end [d1,d2]=min(D);%選擇最近距離換電站 C=tabulate(d2(:));%統(tǒng)計選擇換電站次數(shù) e=C(:,2); err=sum(abs(E-e')) %期望差之和,即博弈對象返回:因為隨機,所有每次結過可能不一樣
3.博弈過程
%% 博弈 J=[]; %價格變化的差值 ER(1)=err; for k=2:100j=0;for i=1:25if e(i)<E(i) && price(i)>=min_priceprice(i)=price(i)-1;j=j+1;endif e(i)>E(i) && price(i)<=max_priceprice(i)=price(i)+1;j=j+1;endendJ=[J,j];DD=[];for i=1:length(H)for j=1:length(x)DD(i,j)=a1*sqrt((H(i,1)-x(j))^2+(H(i,2)-y(j))^2)+a2*price(i);endend[dd1,dd2]=min(DD);CC=tabulate(dd2(:));e=CC(:,2);err=sum(abs(E-e'));ER=[ER,err]; end4.繪圖
% 繪圖 figure plot(ER,'-o') title('E-e的差值變化') set(gcf,'unit','normalized','position',[0.2,0.2,0.64,0.32]) legend('E-e')figure plot(J,'r-o') title('價格的差值變化') xlabel('Iterations(t)') set(gcf,'unit','normalized','position',[0.2,0.2,0.64,0.32]) legend('sum of Price(t)-Price(t-1)')figure bar(price,0.5) hold on plot([0,26],[min_price,min_price],'g--') plot([0,26],[max_price,max_price],'r--') title('換電站的換電價格') ylabel('Price(¥)') axis([0,26,0,300]) set(gcf,'unit','normalized','position',[0.2,0.2,0.64,0.32]);figure h=bar([e,E'],'gr'); set(h(1),'FaceColor','g'); set(h(2),'FaceColor','r'); axis([0,26,0,50]) title('出租車的預期和實際數(shù)量') ylabel('E and e') set(gcf,'unit','normalized','position',[0.2,0.2,0.64,0.32]); xlabel('換電站') legend('e','E')返回:
?完整代碼
clear;clc; setenv('BLAS_VERSION','') %進行錯誤修改 n=900;%換電需求數(shù) min_price=170;%換電價格范圍 max_price=230; A=normrnd(36,5,1,25);%初始期望,平均值為36,方差為5的高斯分布 E=fix(A); %朝0方向取整,如,4.1,4.5,4.8取整都是4 %下面是根據(jù)需求數(shù)調整E的大小 a=sum(E)-n; A=A-a/25; E=fix(A); b=sum(E)-n; A=A-b/25; E=fix(A); a1=0.05;a2=0.95;%距離成本與換點價格權重 x=rand(n,1).*20000;%初始化需求車輛位置 y=rand(n,1).*20000; H=[2,2;2,6;2,10;2,14;2,18%初始化換電站位置 6,2;6,6;6,10;6,14;6,18 10,2;10,6;10,10;10,14;10,18 14,2;14,6;14,10;14,14;14,18 18,2;18,6;18,10;18,14;18,18].*1000; %繪制初始化的司機與換電站的位置圖 figure plot(x,y,'r*') hold on plot(H(:,1),H(:,2),'bo') legend('司機','換電站') title('初始位置圖')%% 計算期望與實際期望 D=[];%需求車輛到各換電站的需求比例 price=200.*ones(1,25); for i=1:length(H)for j=1:length(x)D(i,j)=a1*sqrt((H(i,1)-x(j))^2+(H(i,2)-y(j))^2)+a2*price(i);%總費用end end [d1,d2]=min(D);%選擇最近距離換電站 C=tabulate(d2(:));%統(tǒng)計選擇換電站次數(shù) e=C(:,2); err=sum(abs(E-e')); %期望差之和,即博弈對象 % ER(1)=err%% 博弈 J=[]; %價格變化的差值 ER(1)=err; for k=2:100j=0;for i=1:25if e(i)<E(i) && price(i)>=min_priceprice(i)=price(i)-1;j=j+1;endif e(i)>E(i) && price(i)<=max_priceprice(i)=price(i)+1;j=j+1;endendJ=[J,j];DD=[];for i=1:length(H)for j=1:length(x)DD(i,j)=a1*sqrt((H(i,1)-x(j))^2+(H(i,2)-y(j))^2)+a2*price(i);endend[dd1,dd2]=min(DD);CC=tabulate(dd2(:));e=CC(:,2);err=sum(abs(E-e'));ER=[ER,err]; end % 繪圖 figure plot(ER,'-o') title('E-e的差值變化') set(gcf,'unit','normalized','position',[0.2,0.2,0.64,0.32]) legend('E-e')figure plot(J,'r-o') title('價格的差值變化') xlabel('Iterations(t)') set(gcf,'unit','normalized','position',[0.2,0.2,0.64,0.32]) legend('sum of Price(t)-Price(t-1)')figure bar(price,0.5) hold on plot([0,26],[min_price,min_price],'g--') plot([0,26],[max_price,max_price],'r--') title('換電站的換電價格') ylabel('Price(¥)') axis([0,26,0,300]) set(gcf,'unit','normalized','position',[0.2,0.2,0.64,0.32]);figure h=bar([e,E'],'gr'); set(h(1),'FaceColor','g'); set(h(2),'FaceColor','r'); axis([0,26,0,50]) title('出租車的預期和實際數(shù)量') ylabel('E and e') set(gcf,'unit','normalized','position',[0.2,0.2,0.64,0.32]); xlabel('換電站') legend('e','E')總結
以上是生活随笔為你收集整理的博弈论 —— matlab的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html文件查找关键词,批处理查找文件关
- 下一篇: matlab人脸追踪,求大神帮助我这个菜