日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

博弈论 —— python

發(fā)布時(shí)間:2025/3/15 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 博弈论 —— python 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

1.簡(jiǎn)介

2.算法原理

3.實(shí)例分析

1.各參數(shù)初始化

2.計(jì)算期望與實(shí)際期望

3.博弈過(guò)程

4.繪圖

?完整代碼


1.簡(jiǎn)介

????????博弈論又被稱(chēng)為對(duì)策論(Game Theory)既是現(xiàn)代數(shù)學(xué)的一個(gè)新分支,也是運(yùn)籌學(xué)的一個(gè)重要學(xué)科。

????????博弈論主要研究公式化了的激勵(lì)結(jié)構(gòu)間的相互作用。是研究具有斗爭(zhēng)或競(jìng)爭(zhēng)性質(zhì)現(xiàn)象的數(shù)學(xué)理論和方法。 博弈論考慮游戲中的個(gè)體的預(yù)測(cè)行為和實(shí)際行為,并研究它們的優(yōu)化策略。生物學(xué)家使用博弈理論來(lái)理解和預(yù)測(cè)進(jìn)化論的某些結(jié)果。

????????博弈論已經(jīng)成為經(jīng)濟(jì)學(xué)的標(biāo)準(zhǔn)分析工具之一。在生物學(xué)、經(jīng)濟(jì)學(xué)、國(guó)際關(guān)系、計(jì)算機(jī)科學(xué)、政治學(xué)、軍事戰(zhàn)略和其他很多學(xué)科都有廣泛的應(yīng)用。

????????基本概念中包括局中人、行動(dòng)、信息、策略、收益、均衡和結(jié)果等。其中局中人、策略和收益是最基本要素。局中人、行動(dòng)和結(jié)果被統(tǒng)稱(chēng)為博弈規(guī)則。

????????博弈論簡(jiǎn)單講就是,A采取措施影響B(tài)的行為,B的行為影響A的決策,兩者來(lái)回博弈,最終達(dá)到一個(gè)動(dòng)態(tài)平衡。博弈論嚴(yán)格來(lái)講只是一種解題方式。

2.算法原理

????????以電動(dòng)出租車(chē)與換電站為例,假設(shè)電動(dòng)出租車(chē)及換電站均屬于同一家公司,公司想通過(guò)換電站價(jià)格定價(jià)措施去控制目標(biāo)區(qū)域內(nèi)的出租車(chē)數(shù)量達(dá)到預(yù)期分布。

????????對(duì)于司機(jī)而言,有兩個(gè)成本,一個(gè)是距離成本d,一個(gè)是支付成本p,支付成本即是換電池所支付的電價(jià),我們可以設(shè)立權(quán)重因子a將兩者合并構(gòu)建為一個(gè)效用函數(shù),司機(jī)會(huì)選擇該函數(shù)最小的換電站更換電池,更換電池后司機(jī)一般會(huì)在周?chē)_(kāi)始接單

?

????????對(duì)于公司而言,目標(biāo)函數(shù)則是不同地區(qū)的出租車(chē)實(shí)際分布e與期望分布E的絕對(duì)差之和,公司通過(guò)調(diào)整價(jià)格去影響司機(jī)的選擇,從而調(diào)整司機(jī)在不同區(qū)域的分布

?

雙層博弈論的模型分析

①第一階段,充電站統(tǒng)計(jì)出各電動(dòng)出租車(chē)的換電請(qǐng)求后,根據(jù)優(yōu)化目標(biāo),制定價(jià)格策略

②第二階段,電動(dòng)出租車(chē)根據(jù)自身效用函數(shù)從所有換電站中選擇出目標(biāo)換電站進(jìn)行跟換電池

③第一階段和第二階段交替往復(fù)進(jìn)行,直到達(dá)到均衡

算法設(shè)計(jì)步驟

?

3.實(shí)例分析

1.各參數(shù)初始化

n=900 #換電需求數(shù) min_price=170 #換電價(jià)格范圍 max_price=230 A=np.random.normal(36, 5, 25) #初始期望,平均值為36,方差為5的高斯分布 E=np.floor(A)#朝0方向取整,如,4.1,4.5,4.8取整都是4 # 下面是根據(jù)需求數(shù)調(diào)整E的大小 E=np.floor(A) a=sum(E)-n A=A-a/25 E=np.floor(A) b=sum(E)-n A=A-b/25 E=np.floor(A) a1=0.05;a2=0.95;#距離成本與換點(diǎn)價(jià)格權(quán)重 x=[random.random()*20000 for i in range(n)]#初始化需求車(chē)輛位置 y=[random.random()*20000 for i in range(n)] H=np.mat([[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 # 制初始化的司機(jī)與換電站的位置圖 plt.plot(x,y,'r*') plt.plot(H[:,0],H[:,1],'bo') plt.legend(['司機(jī)','換電站'], loc='upper right', scatterpoints=1) plt.title('初始位置圖') plt.show()

返回:

?

?2.計(jì)算期望與實(shí)際期望

# 計(jì)算期望與實(shí)際期望 D=np.zeros((len(H),n)) #需求車(chē)輛到各換電站的需求比例 price=200*np.ones((1,25)) for i in range(len(H)):for j in range(len(x)):D[i,j]=a1*np.sqrt(((H[i,0]-x[j]))**2+(H[i,1]-y[j])**2)+a2*price[0,i]D=D.T #轉(zhuǎn)置 D=D.tolist() #轉(zhuǎn)為列表格式 d2=[D[i].index(np.min(D[i])) for i in range(n)] C = Counter(d2) e=list(C.values()) err=sum(abs(E-e)) #期望差之和,即博弈對(duì)象 print(err)

返回:因?yàn)殡S機(jī),所有每次結(jié)過(guò)可能不一樣

3.博弈過(guò)程

J=[] #價(jià)格變化的差值 ER=[err] #E-e的變化差值 for k in range(1,100):j=0for i in range(25):if e[i] < E[i] and price[0,i] >= min_price:price[0,i] = price[0,i]-1j=j+1if e[i] > E[i] and price[0,i] <= max_price:price[0,i] = price[0,i]+1j=j+1J.append(j)DD=np.zeros((len(H),n)) #需求車(chē)輛到各換電站的需求比例 # price=200*np.ones((1,25))for i in range(len(H)):for j in range(len(x)):DD[i,j]=a1*np.sqrt(((H[i,0]-x[j]))**2+(H[i,1]-y[j])**2)+a2*price[0,i]DD=DD.T #轉(zhuǎn)置DD=DD.tolist() #轉(zhuǎn)為列表格式dd2=[DD[i].index(np.min(DD[i])) for i in range(n)]C = Counter(dd2)e=[C[i] for i in sorted(C.keys())]err=sum(abs(E-e)) #期望差之和,即博弈對(duì)象ER.append(err)

4.繪圖

#繪制圖 plt.plot(ER,'-o') plt.title('E-e的差值變化') # plt.set(gcf,'unit','normalized','position',[0.2,0.2,0.64,0.32]) plt.legend('E-e') # plt.grid(ls=":",c='b',)#打開(kāi)坐標(biāo)網(wǎng)格 plt.show()plt.plot(J,'r-o') plt.title('價(jià)格的差值變化') plt.xlabel('Iterations(t)') plt.legend('sum of Price(t)-Price(t-1)') # plt.grid(ls=":",c='b',)#打開(kāi)坐標(biāo)網(wǎng)格 plt.show()plt.bar(x = range(1,26), # 指定條形圖x軸的刻度值height=price[0],color = 'steelblue',width = 0.8) plt.plot([1,26],[min_price,min_price],'g--') plt.plot([1,26],[max_price,max_price],'r--') plt.title('換電站的換電價(jià)格') plt.ylabel('Price(¥)') plt.axis([0,26,0,300]) # plt.grid(ls=":",c='b',)#打開(kāi)坐標(biāo)網(wǎng)格 plt.showindex = np.arange(1,26) rects1 = plt.bar(index, e, 0.5, color='#0072BC') rects2 = plt.bar(index + 0.5, E, 0.5, color='#ED1C24') plt.axis([0,26,0,50]) plt.title('出租車(chē)的預(yù)期和實(shí)際數(shù)量') plt.ylabel('E and e') # plt.grid(ls=":",c='b',)#打開(kāi)坐標(biāo)網(wǎng)格 plt.xlabel('換電站') plt.legend(['e','E']) plt.show()

返回:

?

??

?

?完整代碼

#導(dǎo)入相關(guān)庫(kù) import numpy as np import math import random from collections import Counter import matplotlib.pyplot as plt #解決圖標(biāo)題中文亂碼問(wèn)題 import matplotlib as mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默認(rèn)字體 mpl.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負(fù)號(hào)'-'顯示為方塊的問(wèn)題#初始化各參數(shù) n=900 #換電需求數(shù) min_price=170 #換電價(jià)格范圍 max_price=230 A=np.random.normal(36, 5, 25) #初始期望,平均值為36,方差為5的高斯分布 E=np.floor(A)#朝0方向取整,如,4.1,4.5,4.8取整都是4 # 下面是根據(jù)需求數(shù)調(diào)整E的大小 E=np.floor(A) a=sum(E)-n A=A-a/25 E=np.floor(A) b=sum(E)-n A=A-b/25 E=np.floor(A) a1=0.05;a2=0.95;#距離成本與換點(diǎn)價(jià)格權(quán)重 x=[random.random()*20000 for i in range(n)]#初始化需求車(chē)輛位置 y=[random.random()*20000 for i in range(n)] H=np.mat([[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 # 制初始化的司機(jī)與換電站的位置圖 plt.plot(x,y,'r*') plt.plot(H[:,0],H[:,1],'bo') plt.legend(['司機(jī)','換電站'], loc='upper right', scatterpoints=1) plt.title('初始位置圖') plt.show()# 計(jì)算期望與實(shí)際期望 D=np.zeros((len(H),n)) #需求車(chē)輛到各換電站的需求比例 price=200*np.ones((1,25)) for i in range(len(H)):for j in range(len(x)):D[i,j]=a1*np.sqrt(((H[i,0]-x[j]))**2+(H[i,1]-y[j])**2)+a2*price[0,i]D=D.T #轉(zhuǎn)置 D=D.tolist() #轉(zhuǎn)為列表格式 d2=[D[i].index(np.min(D[i])) for i in range(n)] C = Counter(d2) e=list(C.values()) err=sum(abs(E-e)) #期望差之和,即博弈對(duì)象#博弈過(guò)程 J=[] #價(jià)格變化的差值 ER=[err] #E-e的變化差值 for k in range(1,100):j=0for i in range(25):if e[i] < E[i] and price[0,i] >= min_price:price[0,i] = price[0,i]-1j=j+1if e[i] > E[i] and price[0,i] <= max_price:price[0,i] = price[0,i]+1j=j+1J.append(j)DD=np.zeros((len(H),n)) #需求車(chē)輛到各換電站的需求比例 # price=200*np.ones((1,25))for i in range(len(H)):for j in range(len(x)):DD[i,j]=a1*np.sqrt(((H[i,0]-x[j]))**2+(H[i,1]-y[j])**2)+a2*price[0,i]DD=DD.T #轉(zhuǎn)置DD=DD.tolist() #轉(zhuǎn)為列表格式dd2=[DD[i].index(np.min(DD[i])) for i in range(n)]C = Counter(dd2)e=[C[i] for i in sorted(C.keys())]err=sum(abs(E-e)) #期望差之和,即博弈對(duì)象ER.append(err)#繪制圖 plt.plot(ER,'-o') plt.title('E-e的差值變化') # plt.set(gcf,'unit','normalized','position',[0.2,0.2,0.64,0.32]) plt.legend('E-e') # plt.grid(ls=":",c='b',)#打開(kāi)坐標(biāo)網(wǎng)格 plt.show()plt.plot(J,'r-o') plt.title('價(jià)格的差值變化') plt.xlabel('Iterations(t)') plt.legend('sum of Price(t)-Price(t-1)') # plt.grid(ls=":",c='b',)#打開(kāi)坐標(biāo)網(wǎng)格 plt.show()plt.bar(x = range(1,26), # 指定條形圖x軸的刻度值height=price[0],color = 'steelblue',width = 0.8) plt.plot([1,26],[min_price,min_price],'g--') plt.plot([1,26],[max_price,max_price],'r--') plt.title('換電站的換電價(jià)格') plt.ylabel('Price(¥)') plt.axis([0,26,0,300]) # plt.grid(ls=":",c='b',)#打開(kāi)坐標(biāo)網(wǎng)格 plt.showindex = np.arange(1,26) rects1 = plt.bar(index, e, 0.5, color='#0072BC') rects2 = plt.bar(index + 0.5, E, 0.5, color='#ED1C24') plt.axis([0,26,0,50]) plt.title('出租車(chē)的預(yù)期和實(shí)際數(shù)量') plt.ylabel('E and e') # plt.grid(ls=":",c='b',)#打開(kāi)坐標(biāo)網(wǎng)格 plt.xlabel('換電站') plt.legend(['e','E']) plt.show()

總結(jié)

以上是生活随笔為你收集整理的博弈论 —— python的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。