輪盤賭演算法以及matlab的實現

2021-09-25 23:17:27 字數 1242 閱讀 8800

輪盤賭演算法其實是一種選擇演算法。原理其實很簡單,通常運用於遺傳演算法與蟻群退火演算法等。如遺傳演算法中的個體的選擇,等等。

下面介紹,輪盤賭的基本原理。運用的情景:乙個公司有員工甲乙丙丁四位,其為公司創造的價值分別是900萬,200萬,80萬,100萬.年底了,公司老闆想要頒發乙個「mve」獎(最有價值的員工獎),按理說應該直接發給甲,但是老闆為了照顧其他員工,決定設定乙個**系統。他想在保證「按勞分配」的大原則下,再增加點隨機性,因為老闆認為「運氣也是實力的一部分」。初始的想法是產生0~1的隨機數決定誰獲獎。那麼到底如何設計呢?

首先,我們應知道個體的選擇概率,即一員工一為例子,其個體選擇概率是900/(900+200+80+100),為0.7031.

然後依次計算。

員工二為0.1563,員工三為0.0625,員工四為0.0781

所以當個體的選擇概率越大其被選中的概率就會越大,我們想像乙個圓盤,如果個體選擇的概率越大,則其佔的面積越大。越容易被選中。

那我們如何進行編碼表示呢?即將圓盤對映為為乙個【0,1】的線段,個體概率越大,其佔的長度越長。

如本例子,是分為四個區間,區間1的範圍時是0到0.7031。區間2的範圍是0.7031到0.9194.區間三的範圍是0.09194到0.9819.區間四的範圍是0.9819到1。所以我們可以產生多個隨機數,哪個區間落得隨機數多,誰就獲獎。當然,如果我是甲的話,我會建議老闆產生一萬個隨機數來進行統計。

matlab**如下;

%輪盤賭演算法

a=[900;200;80;100]

c=a./sum(a)

z=zeros(4,1)

b(1,1)=c(1,1)

for i=2:4

b(i,1)=b(i-1,1)+c(i,1)

endfor i=1:1000

r=rand()

for j=1:3

if r>b(j)&&r新增:乙個更精簡的實現方式

c=[900,80,200,100];%假設這是目標矩陣,需要對其進行選擇

value_sum=sum(c);

cc=c./value_sum;

r=rand(1);

pc=cumsum(cc,2);%求累加和

tar=find(pc>=r);%返回pc中大於r的位置索引

chose_next=tar(1);%會返回多個大於r的元素的位置,但我們只取第乙個元素

/dàimǎ duàn xiǎo bùjiàn/

**段 小部件

輪盤賭演算法

首先,這個演算法可以如下表述 如果已知a類物件生成概率為p a b類物件生成概率為p b c類物件 k類物件,他們的概率總和為1,問如何在a k中隨機生成乙個物件 演算法理解如下 即我們需要先對0 1區段按照概率大小劃分長度,設隨機生成乙個0 1之間的數,這種隨機數生成結果是在0 1均勻分布的,然後...

輪盤賭演算法

1.基本原理 群體中個體被選擇的概率與其適應度值成正比。設個體表示為 2.由輪盤 化示例 個體 1234 5適應度值24 6810個體被選擇的概率 按照上式計算 0.07 0.13 0.20.27 0.33 3.累積概率 補充上表個體1 2345 適應度值24 6810個體被選擇的概率 按照上式計算...

輪盤賭演算法

首先,這個演算法可以如下表述 如果已知a類物件生成概率為p a b類物件生成概率為p b c類物件 k類物件,他們的概率總和為1,問如何在a k中隨機生成乙個物件 演算法理解如下 即我們需要先對0 1區段按照概率大小劃分長度,設隨機生成乙個0 1之間的數,這種隨機數生成結果是在0 1均勻分布的,然後...