人工智能实验

发布时间:2024-12-22 16:33

人工智能在购物中实现了智能推荐,提升消费体验 #生活知识# #生活感悟# #科技生活变迁# #人工智能影响#

人工智能实验-使用遗传算法求函数最值

最新推荐文章于 2024-05-21 23:09:08 发布

Ogmx 于 2019-04-02 21:05:12 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

完整代码:

#include <bits/stdc++.h>

#define indiv_per_group (50)

#define probability (60)

#define genmax (100)

using namespace std;

typedef struct indi

{

int x;

char bi[5];

int fx;

bool live;

}INDI;

typedef struct group

{

INDI individuals[indiv_per_group];

INDI best;

int best_gen;

int cur_gen;

}GROUP;

int fx(int x)

{

return x*x*x-60*x*x+900*x+100;

}

GROUP Group;

char *stop;

void init()

{

Group.best.fx = -0xffffffff;

Group.best_gen = 0;

Group.cur_gen = 0;

for(int j = 0; j < indiv_per_group; j++)

{

int t = rand() % 100;

for(int k=0;k<5;k++)

{

if(t>50)

Group.individuals[j].bi[k]=1;

else

Group.individuals[j].bi[k]=0;

}

Group.individuals[j].x = strtol(Group.individuals[j].bi,&stop,2);

Group.individuals[j].live = true;

}

}

void assess()

{

for(int i = 0; i < indiv_per_group; i++)

{

Group.individuals[i].fx = fx(Group.individuals[i].x);

}

}

void choose(int gen)

{

double totalFxValue = 0.0;

int i = 0;

for(i = 0; i < indiv_per_group; i++){

totalFxValue += Group.individuals[i].fx;

}

Group.best.fx = Group.individuals[0].fx;

Group.best.x = Group.individuals[0].x;

double tmp_add = 0;

for(i = 0; i < indiv_per_group; i++){

double t = rand() / double(RAND_MAX);

tmp_add += Group.individuals[i].fx;

double tmp = tmp_add / totalFxValue;

if(tmp >= t){

if(Group.individuals[i].fx > Group.best.fx){

Group.best.fx = Group.individuals[i].fx;

Group.best.x = Group.individuals[i].x;

for(int k=0;k<5;k++)

Group.best.bi[k]=Group.individuals[i].bi[k];

}

continue;

}

else{

Group.individuals[i].live = false;

}

}

if(Group.best.fx > Group.individuals[0].fx)

{

Group.best_gen = gen;

}

}

void cross()

{

int first = 0, second = 0;

for(int j = 0; j < indiv_per_group; j++)

{

if(Group.individuals[j].live == false){

while(1){

while(1){

first = rand() % indiv_per_group;

if(Group.individuals[first].live == true)

break;

}

second = rand() % indiv_per_group;

if(Group.individuals[second].live == true)

break;

}

char str[5];

for(int k=0;k<3;k++)

str[k]=Group.individuals[first].bi[k];

for(int k=3;k<5;k++)

str[k]=Group.individuals[second].bi[k];

int new_x=strtol(str,&stop,2);

int new_fx=fx(new_x);

if(new_fx>Group.individuals[first].fx && new_fx > Group.individuals[second].fx)

{

Group.individuals[j].x = new_x;

Group.individuals[j].fx = new_fx;

for(int k=0;k<5;k++)

Group.individuals[j].bi[k]=str[k];

}

else{

if(Group.individuals[first].fx > Group.individuals[second].fx){

Group.individuals[j].x = Group.individuals[first].x;

Group.individuals[j].fx = Group.individuals[first].fx;

for(int k=0;k<5;k++)

Group.individuals[j].bi[k]=Group.individuals[first].bi[k];

}else{

Group.individuals[j].x = Group.individuals[second].x;

Group.individuals[j].fx = Group.individuals[second].fx;

for(int k=0;k<5;k++)

Group.individuals[j].bi[k]=Group.individuals[second].bi[k];

}

}

Group.individuals[j].live = true;

}

}

return;

}

void mutation_one(int x)

{

int pro = rand() % 100;

if(pro > probability)

return ;

for(int k=0;k<5;k++)

{

int t=rand()%100;

if(t>50)

{

if(Group.individuals[x].bi[k]=='1')

Group.individuals[x].bi[k]='0';

else

Group.individuals[x].bi[k]='1';

}

Group.individuals[x].bi[k]^=1;

}

Group.individuals[x].x=strtol(Group.individuals[x].bi,&stop,2);

Group.individuals[x].fx=fx(Group.individuals[x].x);

if(Group.individuals[x].fx > Group.best.fx)

{

Group.best.fx = Group.individuals[x].fx;

Group.best.x = Group.individuals[x].x;

for(int k=0;k<5;k++)

Group.best.bi[k]=Group.individuals[x].bi[k];

}

}

void mutation()

{

for(int i = 0;i < indiv_per_group; i++)

{

if(Group.individuals[i].live == true){

mutation_one(i);

}

}

}

void sovel()

{

init();

for(int i = 1;i <= genmax; i++)

{

Group.cur_gen = i;

assess();

choose(Group.cur_gen);

cross();

mutation();

}

}

int main()

{

srand(time(0));

sovel();

cout<<Group.best.fx<<endl;

cout<<Group.best.x<<endl;

cout<<Group.best.bi<<endl;

return 0;

}

实验结果:

网址:人工智能实验 https://www.yuejiaxmz.com/news/view/540153

相关内容

人工智能时代的智能生活体验.pptx
阿里人工智能实验室首秀:发布智能音箱,有购物助手功能
Python 人工智能实战:智能导航
人工智能:智能家居最终的体验优化方案
AI人工智能家居体验馆
全新智能空调,体验人工智能制冷不容错过!
创新人工智能助手:重塑智能家居体验的终极工具
美食达人推荐 人工智能舒味烹饪棒体验
人工智能革新智能家居体验,重新定义美好生活!
人工智能如何优化个人的虚拟助手和智能家居控制体验? – AISCK

随便看看