關於矩形排樣問題 三

2022-02-16 09:13:46 字數 2149 閱讀 7092

下面只給出核心部分的實現(程式寫得比較粗糙,只實現了演算法,細節的部分還待完善,呵呵)。

首先在主窗體中宣告表示個體的結構體:

typedef struct//針對遺傳演算法定義的乙個個體

genotype;12

3456

7以及作為原材料的矩形板材:

typedef struct //矩形板

rectaa;

typedef struct //矩形板

rectbb;12

3456

78910

1112

1314

1516

考慮到演算法實現的視覺化,中間大部分區域用於顯示排樣的結果,以彩色矩形塊的方式顯示出來,實現比較簡單,不是重點。

下面是遺傳演算法實現的核心,這裡只給出代表核心操作的幾個函式:

//基因換位

void cmydlg::swap(int *a, int *b)

//隨機數

int cmydlg::intgenerate()

//選擇種群

void cmydlg::secletmember()

}for(int i=0;i//適應性

void cmydlg::evaluate()

}//評價

double cmydlg::valuecount(genotype node)

return 1.000*rl/m_width;

}//選種

void cmydlg::keepthebest()

}if(best<=population[m_numall].fitness) //後乙個體不如前乙個體,就不要動前一世代

else

population[p1]=population[p2];}}

*/delete x;

}void cmydlg::crossover()//交叉

m_snumber=i;

datafile.close();

for (i=0;isum=0;

for (i=0;im_height*m_width)

messagebox("超出原始板料!請重新輸入");

for(i=0;i/* int max0,max1,max2,max3;

for (i=9;i>0;i--)}}

*/empty[0].l=m_width;

empty[0].w=m_height;

empty[0].x=0;

empty[0].y=m_height;

}//畫圖

void cmydlg::ondrawfirst()

else

messagebox("長寬不能為0!");

m_flag0=true;

}//繪製競爭勝利的個體

void cmydlg::ondrawbest()

if (rect[i].flag==1)

}}//計算比率

int cmydlg::calcurate(rectbb empty,rectaa rect)

//邊界y處理計算

int cmydlg::transformy(int y)

{int yy;

crect r;

getclientrect(r);

r.left=r.left+21;

r.right=r.right-130;

r.bottom=r.bottom-18;

r.top=r.bottom-m_height*r.width()/m_width;

yy=int(r.bottom-y*r.width()/m_width+0.5);

return yy;

//排序處理

void cmydlg::orderempty()

{ rectbb mid;

for (int i=m_snumber;i>0;i--)

{for (int j=m_snumber;j>m_snumber-i;j--)

{if (abs(empty[j].x-0)//利用率計算

void cmydlg::ontimer(uint nidevent)

{if(generation//繪圖

void cmydlg::drawthelast(genotype node)

{

PCB拼板之單一矩形排樣演算法

一.排樣變數與關係 此演算法,基於固定4邊的尺寸遍歷每個單隻板的長寬得到最優解。二.條件約束 基本約束條件 參考上圖變數 三.排樣圖形相同型別規律 由於計算量大,為了有效減少計算量,提高效率,將排樣型別相同的規律找出來,如左排 上下兩個圖形 對於計算機而言,認為是不一致的,但對於實際應用來說,圖形認...

關於快排的三種實現的說明

include using namespace std intpartsort int arr,int left,int right while left key 交換選出來的左邊比中軸元素大,右邊比中軸元素小這兩個元素。swap arr left arr right 將一趟快排中的中軸元素放到他應...

關於Silverlight安裝問題之三

其實問題二和問題三應該換一下,呵呵 驗證系統要求 請確保您正在執行 與 silverlight 相容的 windows 作業系統和瀏覽器,並且已解除安裝任何以前版本的 silverlight 或 wpf e 名稱 注意 這是 silverlight 的預發布版本,開發人員可使用該版本進行評估。以上是...