將遺傳演算法用於二維下料問題的一些結果

2021-04-13 06:49:07 字數 655 閱讀 8536

最近做了這方面的事情。把自己的一些經驗跟大家分享一下。

遺傳演算法是一種優化演算法,所以可以應用在很多地方。尤其是對於比較複雜或者難於求出精確解的問題,該方法給出了比較好的解決方案。

二維下料問題是說,在固定寬度的板材上切割下一些要求大小的目標物,使得消耗的板材長度最小。

對於這個問題,可以把他抽象為這樣的數學模型:每乙個目標物設定乙個id號,這樣一組id號就構成了乙個切割順序。顯然,在這樣的模型下,切割順序和切割方式對於最終的結果有比較大的影響。

略去切割方式,本文在一種切割方式下,集中對切割順序作乙個小小的分析。

我選擇的切割方法是:將進入的目標物從下到上,從左到右地在板材上找空閒位置,找到後將板材上的該區域標記;重複上述過程直到沒有目標物進入為止。

在上述切割方式下,我的目標轉化為找到乙個合適的序列使得切割後使用的板材長度盡可能地小。

對於這個序列,我使用了遺傳演算法。遺傳演算法控制引數很多,尤其是初始種群的選取對於該演算法有較大影響。我選擇了從大到小排列目標物,然後象擠牙膏那樣生成一組新的序列。用這樣的序列進行進化。基本上對於較小數目的目標物,很快能給出次優序列。從本人實驗的結果看,優化率((直接切割所需長度-優化後所需長度)/直接切割所需長度)平均為11%,有時甚至高達28%。可見,優化和不優化還是有很大差別的。

最近就做了遺傳演算法這方面的一點事情。希望對您能有用。

一維指標和二維指標指向二維陣列的一些問題

廢話少說,先上自己dev c 上的 include int main p,rp 3 q,i p int c rp c q c printf rp d n rp p n c p n p p n q p n q d n rp rp,c p,q q printf rp 1 p n p 1 p n rp 1...

一種將二維表轉換為一維表的方法

計算聚類演算法相關係數的時候,如果開始不知道聚簇和節點數量,如下表所示 k1k2 v1 v2.這時候可以把每個係數看做乙個物件 public class thet 這樣就可以在類中建立乙個一維表,不用考慮v和k的數量了 缺點就是這樣查詢起來可能會慢一點,以後看看有沒有更好的辦法 我是分割線 前面想到...

堡壘問題(有柵欄的搜尋,二維轉一維)

時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述城堡是乙個4 4的方格,為了保衛城堡,現需要在某些格仔裡修建一些堡壘。城堡中的某些格仔是牆,其餘格仔都是空格,堡壘只能建在空格裡,每個堡壘都可以向上下左右四個方向射擊,如果兩個堡壘在同一行或同一列,且中間沒有牆相隔,則兩個堡壘都...