遺傳演算法解決揹包問題

2021-07-10 05:22:56 字數 1285 閱讀 6486

//總體思想與之前的相似,評價函式就是物品的價值之和,但要注意一旦物品的重量大於揹包的重量,那麼該條染色體的倖存概率為0

//基因就是每乙個物品是否選擇,這裡預設有10條染色體在比較,並且每一條染色體上的第i個基因就是代表第i個物品是否選擇

//突變就是隨機選擇的染色體的隨機位置由0變1,由1變0

//另外建議把變異的概率調高點,否則有可能會陷入區域性最優

#include #include #include #include #include #define num 10//種群的大小

#define pm 0.1//變異的概率

#define pc 0.8//交配的概率

#define max 100//最大迭代次數

int n,m;//n為物品種類,m為揹包容積大小

int v[10];//每乙個物品的價值

int w[10];//每乙個物品的重量

typedef struct node

node;

node group[num],grouptemp[num];

void groupproduce()

printf("初始狀態為:\n");

for (i=0;im)

group[i].adapt=0;

else

group[i].adapt=vsum;

sum=sum+group[i].adapt;

}for (i=0;it)

}for (i=0;ifor (i=0;i}void jiaopei()

t=t/2*2;

srand(time(null));

c=0;

d=1;

printf("%d\n",t);

for (i=0;i}

}void bianyi()

srand(time(null));

for (i=0;iif (bianyiflag[i]==1)

}void shuaixuan()

printf("最優選擇為:\n");

for (i=0;iprintf("%d ",group[j].beibao[i]);

printf("\n");

printf("最多獲利為:%d\n",group[j].adapt);

}int main()

pingjia();//最後還要進行一次評價,因為之前交配時更改過beibao(與adapt不對應)

shuaixuan();

return 0;

}

遺傳演算法解決揹包問題(python)

1.問題重述 給定n個物品,價值分別是 v1,v2,vn,重量分別是 w1,w2,wn。在物品不可分割的情況下,挑選物品放入承重為w的揹包,使得揹包內物品的價值最大,且揹包內物品的總重量小於w.2.解決方案 本問題可用多種方法解決,這裡採用遺傳演算法來求解,以下是遺傳演算法的流程圖 要採用遺傳演算法...

遺傳演算法 01揹包問題 C

include include include include include using namespace std const int pack max w 80 揹包最大承受重量 const int pack max v 75 揹包最大承受容積 const int num 32 物品數 con...

tsp問題 遺傳演算法解決

tsp問題最簡單的求解方法是列舉法。它的解是多維的 多區域性極值的 趨於無窮大的複雜解的空間,搜尋空間是n個點的所有排列的集合,大小為 n 1 可以形象地把解空間看成是乙個無窮大的丘陵地帶,各山峰或山谷的高度即是問題的極值。求解tsp,則是在此不能窮盡的丘陵地帶中攀登以達到山頂或谷底的過程。這一篇將...