91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 13KB
    文件類型: .cpp
    金幣: 1
    下載: 0 次
    發(fā)布日期: 2021-05-28
  • 語言: C/C++
  • 標簽: 遺傳算法??四目標??

資源簡介

四目標遺傳算法最小值優(yōu)化代碼,c++,目標函數可以自行更改。

資源截圖

代碼片段和文件信息

//?ConsoleApplication2.cpp:?定義控制臺應用程序的入口點。
//

#include?“stdafx.h“
#include
#include
#include
#include
#define?PI?3.1415926?//圓周率
#define?sizepop?50?//?種群數目
#define?maxgen?500?//?進化代數
#define?pcross?0.6?//?交叉概率
#define?pmutation?0.1?//?變異概率
#define?lenchrom?5?//?染色體長度
#define?bound_down?0?//?變量下界,這里因為都相同,所以就用單個值去代替了,如果每個變量上下界不同,也許需要用數組定義
#define?bound_up?(0.9*3.1415926)?//?上界
double?chrom[sizepop][lenchrom];?//?種群數組
double?fitness[sizepop];?//種群每個個體的適應度
double?fitness_prob[sizepop];?//?每個個體被選中的概率(使用輪盤賭法確定)
double?bestfitness[maxgen];?//?每一代最優(yōu)值
double?gbest_pos[lenchrom];?//?取最優(yōu)值的位置
double?average_best[maxgen?+?1];?//?每一代平均最優(yōu)值
double?gbest;?//?所有進化中的最優(yōu)值
int?gbest_index;?//?取得最優(yōu)值的迭代次數序號


?//?目標函數
double?fit_func(double?*?arr)
{
double?x1?=?*arr;
double?x2?=?*(arr?+?1);
double?x3?=?*(arr?+?2);
double?x4?=?*(arr?+?3);
double?x5?=?*(arr?+?4);
double?func_result?=?-5?*?sin(x1)*sin(x2)*sin(x3)*sin(x4)*sin(x5)?-?sin(5?*?x1)*sin(5?*?x2)*sin(5?*?x3)*sin(5?*?x4)*sin(5?*?x5)?+?8;
return?func_result;
}

//?求和函數
double?sum(double?*?fitness)
{
double?sum_fit?=?0;
for?(int?i?=?0;?i sum_fit?+=?*(fitness?+?i);
return?sum_fit;
}
//?求最小值函數
double?*?min(double?*?fitness)
{
double?min_fit?=?*fitness;
double?min_index?=?0;
static?double?arr[2];
for?(int?i?=?1;?i {
if?(*(fitness?+?i)? {
min_fit?=?*(fitness?+?i);
min_index?=?i;
}
}
arr[0]?=?min_index;
arr[1]?=?min_fit;
return?arr;
}
//?種群初始化
void?init_chrom()
{
for?(int?i?=?0;?i {
for?(int?j?=?0;?j {
chrom[i][j]?=?bound_up?*?(((double)rand())?/?RAND_MAX);
}
fitness[i]?=?fit_func(chrom[i]);?//?初始化適應度
}
}
//?選擇操作
void?Select(double?chrom[sizepop][lenchrom])
{
int?index[sizepop];
for?(int?i?=?0;?i {
double?*?arr?=?chrom[i];
fitness[i]?=?1?/?(fit_func(arr));?//?本例是求最小值,適應度為目標函數的倒數,即函數值越小,適應度越大
}
double?sum_fitness?=?0;
for?(int?i?=?0;?i {
sum_fitness?+=?fitness[i];?//?適應度求和
}
for?(int?i?=?0;?i {
fitness_prob[i]?=?fitness[i]?/?sum_fitness;
}
for?(int?i?=?0;?i {
fitness[i]?=?1?/?fitness[i];?//?恢復函數值
}

for?(int?i?=?0;?i {
double?pick?=?((double)rand())?/?RAND_MAX;
//while?(pick? for?(int?j?=?0;?j {
pick?=?pick?-?fitness_prob[j];
if?(pick?<=?0)
{
index[i]?=?j;
break;
}

}

}
for?(int?i?=?0;?i {
if?(index[i]?!=?0)
{
for?(int?j?=?0;?j {
chrom[i][j]?=?chrom[index[i]][j];
}
fitness[i]?=?fitness[index[i]];
}

}
}

//?交叉操作
void?Cross(double?chrom[sizepop][lenchrom])
{
for?(int?i?=?0;?i {
//?隨機選擇兩個染色體進行交叉
double?pick1?=?((double)rand())?/?RAND_MAX;
double?pick2?=?((double)rand()

評論

共有 條評論