陶曉靜+楊雄
摘 要:在高職數(shù)學建模的教學中,會遇到一些博弈問題,稍簡單的問題尚可用理論推斷,手動計算,一旦數(shù)據(jù)量增加,就對MATLAB等軟件的使用提出了更高的要求。文章從一個經典的博弈問題出發(fā),探討了MATLAB循環(huán)語句的使用實踐,對數(shù)學建模教學起到了良好的促進作用,也增強了高職學生學習數(shù)學軟件的興趣與信心。通過軟件處理含有復雜數(shù)據(jù)的數(shù)學問題,實現(xiàn)了從課堂走向實踐的可能。
我們知道博弈論對現(xiàn)代社會的深遠影響,并且了解它在現(xiàn)代數(shù)學中的重要地位。它是連接數(shù)學與現(xiàn)代社會的紐帶與橋梁。而其中權力指數(shù)是我們常見的博弈論問題,也十分重要。在實際研究中人們不但要進行定性分析,也要對相關問題進行定量分析,而大量的數(shù)據(jù)阻礙了很多人對大數(shù)據(jù)問題的研究。MATLAB在教學過程中打開了一種新的局面,培養(yǎng)了學生處理數(shù)據(jù)的能力。
本文從權力指數(shù)這個問題入手,通過一個例題展示數(shù)學建模課程中使用MATLAB軟件的一些技巧與心得。
一、博弈問題的描述
1.博弈論概述
博弈論也稱為對策論(Game Theory),是現(xiàn)代數(shù)學的一個重要分支,屬于運籌學的一部分。博弈論研究公式化的激勵結構之間的相互作用,是研究斗爭或競爭性現(xiàn)象的數(shù)學理論與方法??煽紤]個體的預測行為和實際表現(xiàn),進一步研究個體的改進策略,為個體決策提供理論依據(jù)與量化指標。
2.權力指數(shù)的概念
公司在做出決策的時候,需按股權分量進行表決。在通常情況下,大股東的意志對決策有著巨大影響。具體來說,設一共有n個股東,C1,C2,…Cn,股權分量不一,某決議的通過表決時有以下幾種可能。
(1)若C1離場,C2,C3…Cn能否直接做出決定?
(2)若C2離場,C1,C3…Cn能否直接做出決定?
(3)同理,若 Ci,i>2,離場,情況會怎樣?
否定其他股東預決議的能力稱為他的權力指數(shù)。
二、權力指數(shù)在投票表決中的應用
表決時,為了體現(xiàn)己方的表決意志,必須獲得足夠多的票數(shù)。通過權力指數(shù),我們可以方便地了解某人在表決過程中的重要程度,并由此做出相應的決策。
案例1 某公司有A、B、C、D、E五個股東,決策原則遵循“一股一票”。他們的股份分別為:A擁有36股,B擁有16股,C擁有16股,D擁有16股,E擁有16股。
若A暫時離場,由B、C、D、E對于某項決議進行初步的表決,我們稱之為預決策。預決策時,共有24=16種情形。
解:%ABCDEF的權力指數(shù)計算語句
a=input('please input a');
b=input('please input b');
c=input('please input c');
d=input('please input d');
e=input('please input e');
f=input('please input f');
A=a+b+c+d+e+f;%計算票數(shù)的和
k=0;
%如果要計算其他人的權力指數(shù)只需在這里將a與其他變量進行一個交換。
%其交換語句如交換a與b,以計算b的權力指數(shù)為:a=m;a=b;b=m;
forC2=0∶1
for C3=0∶1
for C4=0∶1
for C5=0∶1
for C6=0∶1
sum=C2*b+C3*c+C4*d+C5*e+C6*f;
if sum>b+c+d+e+f-sum
if sum k=k+1; end elseif sum+a>b+c+d+e+f-sum k=k+1; end end end end end end fprintf('quanlizhishuwei %6.2f',k) 輸入36 16 16 16 16,得a 的權力指數(shù)為14,如此進行替換后,可計算得b、c、d、e權力指數(shù)都為2。 案例2 議員名額的分配 某國家有人口數(shù)量不等的六個地區(qū)。國家議員人數(shù)按地區(qū)分配如表1所示: 議員的總人數(shù)是31。雖然地區(qū)a地區(qū)、b地區(qū)、c議員都不足以單獨左右議會決議,但這三個地區(qū)中任何兩個地區(qū)的票數(shù)之和都已經超過了議會的半數(shù)。有人動議將議員人數(shù)變更為12、10、8、3、3、2,請分析權力指數(shù)與比重的變化以及為各個地區(qū)給出決策。對上例程序稍微修改就能得到如下解: 解:a=input(‘please input a); A=a(1)+a(2)+a(3)+a(4)+a(5)+a(6); k=0;M=[0 0 0 0 0 0];n=1; for C2=0∶1 for C3=0∶1 for C4=0∶1 for C5=0∶1 for C6=0∶1 sum= C2*a(2)+ C3*a(3)+ C4*a(4)+ C5*a(5)+ C6*a(6); if sum>a(2)+a(3)+a(4) +a(5)+a(6)-sum if sum k=k+1; end elseif sum+a(1)>a(2)+a(3)+a(4)+a(5)+a(6)-sum k=k+1; end