GALib案例详解(一)

基于Galib的C++遗传算法实战详解 看完这么多,你应该意识到:遗传算法从来不是一个“设置参数→点击运行”的黑箱工具。它是关于表达、引导与平衡的艺术。你会选择合适的编码,因为它决定了搜索空间的几何形态;你会精心设计适应度函数,因为它塑造了进化的引力场;你会调整算子参数,因为你知道探索与开发之间的微妙平衡;你会监控多样性和收敛性,因为你理解早熟与停滞的区别。最终,你不再只是“使用”GA,而是与它对话,引导它,甚至改造它。而这,才是真正的智能优化之道。✨。 阅读详情
/* ----------------------------------------------------------------------------
  ex1.C
  mbwall 28jul94
  Copyright (c) 1995-1996  Massachusetts Institute of Technology
  翻译:天明Future
 DESCRIPTION:
   Example program for the SimpleGA class and 2DBinaryStringGenome class.
This program tries to fill the 2Dgenome with alternating 1s and 0s. 
  This example uses the default crossover (single point), default mutator
(uniform random bit flip), and default initializer (uniform random) for the
2D genome.
SimpleGA类和2DBinaryStringGenome类的示例程序。
该程序尝试用交替的1和0填充2Dgenome。
   本示例为2D genome 使用默认的corssover(单点),默认的mutator(均匀随机位翻转),
和默认初始化(均匀随机)。

  Notice that one-point crossover is not necessarily the best kind of crossover
to use if you want to generate a 'good' genome with this kind of objective 
function.  But it does work.
请注意,如果您想生成具有此类目标函数的“良好”基因组,单点交叉不一定是最好的交叉类型。
但这确实有效。

---------------------------------------------------------------------------- */
#include <ga/GASimpleGA.h>	// 我们将使用普通的GA
#include <ga/GA2DBinStrGenome.h> // 和2D二进制stringgenome
#include <ga/std_stream.h>

#define cout STD_COUT

float Objective(GAGenome &);	//目标函数的声明,定义在文件的最后

int
main(int argc, char **argv)
{
  cout << "Example 1\n\n";
  cout << "This program tries to fill a 2DBinaryStringGenome with\n";
  cout << "alternating 1s and 0s using a SimpleGA\n\n"; cout.flush();
/*
See if we've been given a seed to use (for testing purposes).  When you
specify a random seed, the evolution will be exactly the same each time
you use that seed number.

查看是否已获得种子供使用(用于测试目的)。
当你指定随机种子,每次的演化将完全相同。
您使用该种子编号。
*/
  for(int ii=1; ii<argc; ii++) {
    if(strcmp(argv[ii++],"seed") == 0) {
      GARandomSeed((unsigned int)atoi(argv[ii]));
    }
  }

// Declare variables for the GA parameters and set them to some default values.
// 为GA参数声明变量,并且赋予初始值。
  int width    = 10;
  int height   = 5;
  int popsize  = 30;
  int ngen     = 400;
  float pmut   = 0.001;
  float pcross = 0.9;
/*
Now create the GA and run it.  First we create a genome of the type that
we want to use in the GA.  The ga doesn't operate on this genome in the
optimization - it just uses it to clone a population of genomes.
现在创建GA并运行它。 首先,我们创建一个我们想在GA中使用的基因组类型。
。 ga在优化过程中不操作这个genome,它仅用它来克隆一组基因组的种群。
*/
  GA2DBinaryStringGenome genome(width, height, Objective);

/*
Now that we have the genome, we create the genetic algorithm and set
its parameters - number of generations, mutation probability, and crossover
probability.  And finally we tell it to evolve itself.
现在我们有了基因组,我们创建遗传算法并设置它的参数(世代数,突变概率和交叉概率)。
最后,我们告诉它自我进化。
*/
  GASimpleGA ga(genome);
  ga.populationSize(popsize);
  ga.nGenerations(ngen);
  ga.pMutation(pmut);
  ga.pCrossover(pcross);
  ga.evolve();

// Now we print out the best genome that the GA found.
// 现在我们打印出来GA找到的最好的genome

  cout << "The GA found:\n" << ga.statistics().bestIndividual() << "\n";

  return 0;
}
 


/*
 This is the objective function.  All it does is check for alternating 0s and
 1s.  If the gene is odd and contains a 1, the fitness is incremented by 1.
 If the gene is even and contains a 0, the fitness is incremented by 1.  No
 penalties are assigned. 
这是目标函数。它所做的只是检查交替的0和1。如果基因是奇数且包含1,则适应度增加1。
如果基因是偶数且包含0,则适应度增加1。没有增加惩罚机制。

  We have to do the cast because a plain, generic GAGenome doesn't have 
the members that a GA2DBinaryStringGenome has.  And it's ok to cast it
because we know that we will only get GA2DBinaryStringGenomes and
nothing else.
我们必须进行转换,因为普通的通用Genome没有GA2DBinaryStringGenome所拥有的成员。
并且可以安全的进行转换,因为我们知道我们只会得到GA2DBinaryStringGenomes,而非其他。
*/
float
Objective(GAGenome& g) {
  GA2DBinaryStringGenome & genome = (GA2DBinaryStringGenome &)g;
  float score=0.0;
  int count=0;
  for(int i=0; i<genome.width(); i++){
    for(int j=0; j<genome.height(); j++){
      if(genome.gene(i,j) == 0 && count%2 == 0)
	score += 1.0;
      if(genome.gene(i,j) == 1 && count%2 != 0)
	score += 1.0;
      count++;
    }
  }
  return score;
}

 

遗传算法解决TSP问题(全) 遗传算法解决TSP问题··································································································································· 立即下载

相关推荐

galib C++ 遗传算法

galib 是基于C++的强大遗传算法的工具,可以利用其运用遗传算法。

遗传算法简介

今天来讲遗传算法,遗传算法有很多应用,比如寻路问题,八数码问题,囚犯困境问题,动作控制,TSP问题,生产 调度问题,在一个多边形中寻找一个包含在该多边形内的一个圆,函数求最值问题等等。之前讲的模拟退火算法是用 来求解最优化问题的,链接为:http://blog.youkuaiyun.com/acdreamers/article/details/10019849 模拟退 火算法用一句话概括就是:贪心过程中

ACdreamer 8207

麻省理工开发的免费遗传算法类库GAlib c++

麻省理工开发的免费遗传算法类库GAlib c++

GAlib编译

本教程是参考(https://www.cnblogs.com/zuisanlang/articles/2284471.html)写的。由于中间遇到了点问题,所以想自己写一个非常详细的教程,也可移步上面的地址,有问题再回来看。 GAlib编译必看教程:1: https://www.cnblogs.com/zuisanlang/articles/2284471.html 2: https://b...

xingdu_的博客 988

GAlib2.4.7 轻量级编译方法

解决了Windows环境下GaLib247原生程序的编译Bug;采用轻量级Dos命令编译Ga库文件,告别了IDE对系统资源的需求。

使用GAlib遗传算法库解决TSP问题_Genetic_for_tsp.zip

使用GAlib遗传算法库解决TSP问题_Genetic_for_tsp

关于GaLib247 EX5成员函数copy的理解

关于GaLib247 EX5中 CompositeGenome::copy的理解 问题背景回顾: EX5介绍了一种衍生自GAGenome类的合成基因组类(composite genome),该类包含了一个2DBinStr基因组和一个Bin2Dec基因组。程序利用steady-state GA来匹配2DBinStr部分中的2D模式,以及一个Bin2Dec部分中的数列。 该合成基因组类中定...

yanle_usstedu的博客 284

Minecraft Forge模组开发入门:从环境搭建到事件监听实战

事件驱动编程是一种基于事件和事件监听器的软件架构模式,其核心原理是通过事件总线实现组件间的松耦合通信。在游戏开发领域,这种模式能够有效处理玩家交互、状态变更等异步操作,具有高度的灵活性和可扩展性。Java作为面向对象编程语言,通过注解和反射机制为事件驱动提供了天然支持。Minecraft模组开发正是事件驱动编程的典型应用场景,开发者可以利用Forge框架提供的事件总线监听游戏内各种行为。本文以Minecraft Forge模组开发为例,详细讲解如何通过Gradle构建工具搭建开发环境,并实现自定义方块注册和

culi3182的博客 395

GAlib在VS上的安装配置

1. 新建项目 新建项目­>win32项目,输入项目名称,确认项目存储位置及选中为解决方案创建目录,创建空项目,完成。 2. 入GALib中的文件 导入头文件*.h和*.c文件 3. 修改项目配置 配置属性—>常规:配置类型=应用程序(.exe) 公共语言运行时支持=无公共语言运行时支持 C/C++—> 常规: 附加包含目录 = (GALib所在目录) C/C++—> 预处理

耿直boy 1001

RK3588上rknn_toolkit_lite2报错解决:手把手教你更新librknnrt.so的正确姿势

本文针对在RK3588平台上使用rknn_toolkit_lite2时遇到的“Invalid RKNN model version”等常见错误,提供了完整的诊断与解决方案。文章深入剖析了RKNN生态系统各组件(如librknnrt.so、RKNN Server)版本不兼容的根源,并手把手指导如何安全、正确地更新librknnrt.so运行时库,确保AI模型在RK3588 NPU上实现高效推理。

weixin_29189003的博客 520

数学概念 | 旋转矩阵、欧拉角、四元数

旋转矩阵、欧拉角、四元数概念及相关运算;

NapoleonCoder的博客 772

并行遗传算法库pgalib

是经典的遗传算法库,该库历史悠久(1996),未能实现并行计算。笔者使用openMP仅在该库中添加了,将galib改造成为主从并行遗传算法库,新库的名称命名为pgalib。

李文韬的博客 417

在 Ansys CFX Pre 中配置 RGP 表的分步指南

掌握在 Ansys CFX Pre 中设置 RGP 表的技巧,以优化仿真精度和效率。

jkh920184196的博客 1664

Visual Studio 2010编译GaLib2.47的办法

(译)使用Visual C++编译GALib(静态库) 原文:Compiling GALib Using Microsoft Visual C++ 另外再多说一句:经过我的多次尝试,发现galib能够编译成dll,在它提供的makefile中提供了编译dll的一些参数,经过一些简单的修改,就可以生成dll,但是生成的dll没有相应的lib(输入库),后来进过一番查证才发现,生成

David的专栏 5505

2026华为OD机试 新系统真题题库目录|机考题库 + 算法考点详解

华为OD机试 新系统真题题库目录|机考题库 + 算法考点详解华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2026e卷,od机试,2026E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2026华为od,如何备战华为od,华为od算法,华为od手撕代码,华为OD机试2024年最新题库,

KJ.JK 4695

【C语言趣味教程】(0) 专栏介绍

这是一套C 语言趣味教学专栏,目前正在火热连载中,欢迎猛戳订阅!本专栏保证篇篇精品,继续保持本人一贯的幽默式写作风格,当然,在有趣的同时也同样会保证文章的质量,旨在能够产出"有趣的干货" !本系列教程不管是零基础还是有基础的读者都可以阅读,可以先看看目录!标题前带星号 (*) 的部分不建议初学者阅读,因为内容难免会超出当前章节的知识点,面向的是对 C 语言有一定基础或已经学过

有道无术, 术尚可求。有术无道, 止于术。 2万+

移植GAlib2.4.7到Visual Studio 2008

GAlib是什么? “GAlib contains a set of C++ genetic algorithm objects. The library includes tools for using genetic algorithms to do optimization in any C++ program using any representation and genetic op

fovwin的专栏 1800

在 SAP S/4HANA 分析模型中添加 Measures,Calculated、Restricted、Currency Conversion 与 Unit Conversion 的建模思路

摘要: SAP S/4HANA分析查询建模中,度量(measure)的加工层级是关键难点,涉及聚合时机、币种/单位语义、过滤上下文等复杂因素。度量不仅是数字字段,还需处理计算口径(Calculated Measures)、上下文绑定(Restricted Measures)和单位转换等问题。Calculated Measures适合派生指标(如毛利率),需注意聚合前后计算差异;Restricted Measures通过固化过滤条件(如区分实际/计划金额)确保业务语义一致性。建模时应将业务逻辑下沉到分析模型层

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1022

GALIB VS设置

http://hyperdrifter.com/ai/software/compiling_galib_using_microsoft_visual_cpp.html 

lizhanglin的专栏 459

js逆向实战:爬取淘宝男装商品

本文介绍了一个淘宝商品数据爬取程序的技术实现方案。该程序通过分析淘宝H5页面接口,实现了商品名称、价格、销量等关键信息的抓取,并支持图片下载功能。核心内容包括:1. 使用Request库发送HTTP请求获取数据;2. 通过逆向分析淘宝的签名算法(MD5加密)生成合法请求;3. 解析JSON数据并提取商品信息;4. 处理分页参数实现多页数据爬取;5. 将数据保存为CSV文件并下载商品图片。程序还实现了反爬虫绕过、错误处理、文件管理等辅助功能,完整展示了从数据采集到存储的全过程。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 1573

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

windows xp 环境下编译GAlib

<br />一、GAlib简介<br />GAlib<br />A C++ Library of Genetic Algorithm Components <br />the current release is version 2.4.7 <br /><br />GAlib contains a set of C++ genetic algorithm objects. The library includes tools for using genetic algorithms to do optimi

qilihechuncai的专栏 1294

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

GaLib的用法总结

1、ex1.c文件中,遍历结果基因的代码: const GAGenome& bestGenome = ga.statistics().bestIndividual(); const GA2DBinaryStringGenome& strGen = (const GA2DBinaryStringGenome&)bestGenome; vector<vector&l...

瞬Future 946

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

遗传算法(genetic algorithm GA)源代码或程序下载地址

GAlib - A C++ library of genetic algorithm objects.  http://lancet.mit.edu/ga/ jaga - Java Genetic Algorithm Package. http://cs.felk.cvut.cz/~koutnij/studium/jaga/jaga.html Simple GA code in C (fo

1564

c++ 开源算法库 (持续更新)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33757911的博客 1578

GacLib使用方法(一)

GacLib使用方法 这是vczh大神的GacLib库新手入门,为自己做点笔记,详细的信息可以参考网页。下面简单说说怎么在自己的程序中使用GacLib库,本文只是前述网址中新手教程的一点体验,使用的环境是64位windows7专业版和visual studio 2013 professional。 Step 1. Create a Visual C++ Project will Ga...

apv16738的博客 710
上一篇: 软件著作权-源码清理
下一篇: 无法识别的标志 -FitObjData p2
TimeFuture2017
博客等级 码龄10年 115粉丝 175原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值