//總體思想與之前的相似,評價函式就是物品的價值之和,但要注意一旦物品的重量大於揹包的重量,那麼該條染色體的倖存概率為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,則是在此不能窮盡的丘陵地帶中攀登以達到山頂或谷底的過程。這一篇將...