plasticsuper Site Admin

註冊時間: 2005-08-04 文章: 623 來自: 台北
|
發表於: 星期六 七月 18, 2009 2:27 pm
文章主題: |
|
|
一直很想寫一下本程式的原理,讓有心人可以繼續開發更好的軟体。基本上這個程式並沒有參考別人的作品,網站也不會看到。我是看了John Holland的基因演算法(genetic algorithm)的介紹之後覺得它可以用在解決排班問題上才著手研究撰寫的。
如果讀者很有心就去找全國博碩士論文集,裡面有詳述這個軟体的原理和我用的一些改進方法。不過碩士論文裡所寫的是第一版所用的方法,到了第二版時我翻新了排班人員和班次間關係的編碼,使得新程式有能力排一班多人的班。
簡單地說明:
假設每天有 A,B,C 三個班要排,A班需要3人;B班需要2人;C班需要1人,而可排班人數有a,b,c,d,e,f,g,h 八人
第一版的編碼是考慮A,B,C各填入那些人。例如
(A)d,e,f ---(B)a,c---(C)b 這就是一天的班。但這個方法有很要命的缺點,一旦班人數改變,所有後續的程式都要改寫,因此只適合一個班只有一個人的情形。
在第二版時改成每個班都是8bit,由0,1來決定當天某人是不是值班,所以
(A)00011100---(B)10100000---(C)01000000 這樣是一天的班
這種想法的改變不僅使程式更容易設計,而且可容易計算適合度(fitness)和複雜的條件要求。 _________________ With malice toward none, with charity for all
各位!電腦不要看太久,起身運動一下吧
 |
|
|