网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
07月31日漏签0天
c语言吧 关注:798,902贴子:4,357,693
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 7回复贴,共1页
<<返回c语言吧
>0< 加载中...

新手写的一个小程序,大神请绕道

  • 只看楼主
  • 收藏

  • 回复
  • jsjdci
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
遗传算法求函数最小值的解,
第一次写这么多代码,嘿嘿


  • jsjdci
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#include<windows.h>
int trans1(int);
int trans2(int);
int function(int);
int comparing(int *);
int trans1(int x)
{
int i, s, b[6];
double k;
for (i = 0; i < 6; i++)
{
k = ((x % (int)pow(10, i + 1)) / (pow(10, i)));
b[i] = floor(k);
}
s = b[0] + 2 * b[1] + 4 * b[2] + 8 * b[3] + 16 * b[4] + 32 * b[5];
return s;
}
int function(int a)
{
int y;
y = a * a - 19 * a + 20;
return y;
}
int comparing(int *ar)
{
int m, i, t, k = 0;
m = function(ar[0]);
for (i = 1; i <= 9; i++)
{
if (function(ar[i]) < m)
{
m = function(ar[i]);
k = i;
}
}
t = *(ar + k);
*(ar + k) = 100;
return trans2(t);
}
int trans2(int t)
{
int a[6] = { 0,0,0,0,0,0 }, i = 0, s;
while (t)
{
a[i] = t % 2;
t = floor((double)t / 2);
i++;
}
s = a[0] + 10 * a[1] + 100 * a[2] + 1000 * a[3] + 10000 * a[4] + 100000 * a[5];
return s;
}
int main()
{
int a[10],i,j,b[4][6],s[10];
int x[10];
int t = 3,t0, k1, k2, g, n;
int d[2][6], t1, t2;
int sr,state=0;
printf("**********************************************************\n\n");
printf(" 此程序用遗传算法求函数f(x)=x^2-19*x+20 最小值的解\n\n");
printf("**********************************************************\n\n\n");
Sleep(1000);
printf("输入四个六位二进制数字 x1 到 x4\n");
scanf_s("%d %d %d %d", x, x + 1, x + 2, x + 3); //以二进制形式输入六位数字存入一维数组x中
printf("输入任意数字开始进化,输入q结束进化\n");
while (scanf_s("%d", &sr) == 1)
{
srand((unsigned)time(0));
//将x0到x3中的六位数放入二维数组中进行交叉互换,并把交换后的新值放入x4到x7中
for (j = 0; j <= 3; j++)
for (i = 0; i <= 5; i++)
b[j][i] = floor((x[j] % (int)pow(10, i + 1)) / pow(10, i));
while (t == 3)
t = ((rand() % 10) / 3);
if (t == 0)
k1 = 1, k2 = 2;
else if (t == 1)
k1 = 0, k2 = 2;
else
k1 = 0, k2 = 1;
t0 = rand() % 5;
g = b[k1][t0+1];
n = b[k1][t0];
b[k1][t0 + 1] = b[k2][t0 + 1];
b[k1][t0] = b[k2][t0];
b[k2][t0 + 1] = g;
b[k2][t0] = n;
g = b[t][t0 + 1];
n = b[t][t0];
b[t][t0 + 1] = b[3][t0 + 1];
b[t][t0] = b[3][t0];
b[3][t0 + 1] = g;
b[3][t0] = n;
for (j = 4; j <= 7; j++)
x[j] = b[j - 4][0] + 10 * b[j - 4][1] + 100 * b[j - 4][2] + 1000 * b[j - 4][3] + 10000 * b[j - 4][4] + 100000 * b[j - 4][5];
printf("交叉互换后的数x4到x7等于%d %d %d %d\n", x[4], x[5], x[6], x[7]);
//交叉互换结束
//将x1到x4放入二维数组d中进行突变,并把突变后的新值放入x8到x9中 k1 = rand() % 4;
k2 = rand() % 4;
while (k1 == k2)
k2 = rand() % 4;
for (j = 0; j <= 1; j++)
if (j == 0)
for (i = 0; i <= 5; i++)
d[j][i] = floor((x[k1] % (int)pow(10, i + 1)) / pow(10, i));
else
for (i = 0; i <= 5; i++)
d[j][i] = floor((x[k2] % (int)pow(10, i + 1)) / pow(10, i));
t1 = rand() % 6;
t2 = rand() % 6;
if (d[0][t1] == 0)
d[0][t1] = 1;
else
d[0][t1] = 0;
if (d[1][t2] == 0)
d[1][t2] = 1;
else
d[1][t2] = 0;
for (j = 8; j <= 9; j++)
x[j] = d[j - 8][0] + 10 * d[j - 8][1] + 100 * d[j - 8][2] + 1000 * d[j - 8][3] + 10000 * d[j - 8][4] + 100000 * d[j - 8][5];
printf("突变后的新数x8到x9等于%d %d\n", x[8], x[9]);
//突变结束
//将二进制数x0到x9转换成十进制放入数组a中,计算f(a)的值
for (j = 0; j <= 9; j++)
a[j] = trans1(x[j]);
for (j = 0; j <= 9; j++)
s[j] = function(a[j]);
for (j = 0; j <= 9; j++)
{
printf(" x=%d, ", a[j]);
printf("f(x)=%d\n", s[j]);
}
//比较10个f(a)的大小
for (j = 0; j <= 3; j++)
x[j] = comparing(a);
for (j = 0; j <= 3; j++)
printf("得到的解x等于%d, %d\n", x[j],trans1(x[j]));
printf("\n\n");
state++;
}
printf("******************\n\n");
printf(" 计算结束\n\n");
printf("进化次数:%d 最终结果等于%d, %d\n",state, x[0],trans1(x[0]));
Sleep(10000);
return 0;
}


2025-07-31 01:34:59
广告
不感兴趣
开通SVIP免广告
  • jsjdci
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
新手水平有限,用的最简单的知识写的,第一次写这么多代码
感觉学c语言最好的方法就是实践,多打代码,才能发现问题并解决问题然后不断进步,有时候书本看不懂,但实际用起来也就那么回事。


  • Mactor-
  • 帕秋莉糕
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
什么玩意没看懂到底干什么


  • ma_victor
  • 异能力者
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
楼主学了几年?


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 7回复贴,共1页
<<返回c语言吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示