我最近一直在学习遗传算法,学习一个东西最好的办法就是用上它,然后我就用python写了一个简单的解多元二次方程的遗传算法,当我写完以后就开始了另一个想法: 可以用Anylogic写一个遗传算法吗?
然后我就开始了:

先确定求解的问题

建立一个简单的方程:y=x_1x_1+x_2x_2+x_3x_3+x_4x_4+x_5x_5
目标设为求 min y
也就是求 min (x_1
x_1+x_2x_2+x_3x_3+x_4x_4+x_5x_5)
参数x_1,x_2,x_3,x_4和x_5的范围都设为[-5,5]
上面这个问题很简单,一眼就可以看出来解是(0,0,0,0,0)
但是这里只是为了试验Anylogic是否可以写一个简单的遗传算法,就没有必要一开始就解复杂的问题。

进行遗传编码

上面的问题很简单,我们就直接按照x_1,x_2,x_3,x_4和x_5进行编码,遗传基因为五位,用实数进行编码,[x_1,x_2,x_3,x_4,x_5]。

产生初始群体的方法

这里就采用最简单的方法:随机(也不会其它方法)
初始种群采用随机函数生成每个基因。

获得交叉父代的方法与遗传算子

通常采用的选择的方法有轮盘赌选择、(mu+lambda)选择、竞争选择等
选择遗传父代采用轮盘赌选择,就是按照每个个体的适应度确定选择的概率;生存选择采用(mu+lambda)方法。
轮盘赌:
从群体中随机选择,每个个体的选择概率根据个体的适应度来决定。
(mu+lambda):
lambda个子代由mu个父代产生,进行生存选择时丢弃所有的父代,在子代选择出最优的mu个个体构成新的群体。

遗传算子采用算数算子
子代采用权重继承父代的基因
算数算子: x’=x1lambda1+x2lambda2 (lambda1+lambda2=1,lambda1>0,lambda2>0)

这些都确定好了,可以开始写代码(建模)

应该是建模!
首先是建立一个工程,命名就直接一点,就叫GA,然后就进入工程main智能体。
然后呢?
遗传算法的主要过程是怎么样的呢?
首先要确定用什么来储存基因编码,在python可以直接用列表来储存,Anylogic也有类似的类(Linkedlist),对就是用LinkedList来储存基因。
那每个个体除了基因还有适应度,怎同时储存基因和适应度呢?
也可以直接用LinkedList,但是在建模过程中会显得很不清晰,所以可以直接采用建立智能体。
在Agent库里拖拽agent到main里,选择Agent type only ,智能体类型命名为Individual
在工程树中双击该类型,进入Individual类型编辑,在智能体中添加一个LinkedList和变量就可以表示一个个体的基因和适应度。

然后将LinkedList和变量改为gene和value后,完成好了Individual类的建立了。

建立好了个体类型就需要确定如何给初始群体添加基因和计算适应度(也就是算出,该个体的值)。
解决这样的问题,可以通过建立函数的方式。
这里就建立两个函数,分别用于添加基因和计算适应度。

上图是我建立好的工程,图中的define_var_for_ind是定义个体的基因的函数,函数内容如下图,图中定义了两个参数,一个是ind,是需要添加基因的个体;另一个是vbounds,表示函数每个变量的限制区间,函数体是一个循环,该循环是对每个基因赋予范围内的随机数,并且在最后返回添加的个体的基因:

图中还有一个函数叫get_value名字很直接,就是获得个体的值。这个函数只需要输入个体然后根据之前的目标函数算出函数值。

怎么实现遗传算法过程呢?

采用状态图,将算法过程看成是一个智能体。
然后建立一个智能体,选择a single agent,并且命名为ga_process.

双击进入,然后考虑整个过程是什么样的。
初始化群体→选择父代→杂交→变异→查看是否合法→循环产生足够的子代→循环产生足够的代数
然后画出来的状态图如下(这是已经建好的

我用Anylogic写了一个遗传算法相关推荐

  1. java编程游戏飞机旋转问题_用JAVA写的一个飞机游戏

    根据网上视频教程,用JAVA写的一个飞机程序.先看效果先: 改程序主要应用了面向对象的方法构建,使用了AWT技术和一些双缓冲技术 关键有几个点: 一.双缓冲技术,防止重画造成的屏幕闪烁,可以直接用 p ...

  2. 在纸上写好一个c语言程序后,上机运行的基本步骤为,c基本概念(选择题).docx

    PAGE / NUMPAGES 一.单选题 1.下面叙述中正确的是: (A) 在C语言程序中,main()函数必须放在程序的开始位置 (B) 在C语言程序中,要调用的函数必须在main()函数中定义 ...

  3. 怎样写出一个较好的高速排序程序

    写出一个较好的高速排序程序 高速排序是经常使用的排序算法之中的一个,但要想写出一个又快又准的使用程序,就不是那么简单了 须要注意的事项 首先要写正确.通常使用递归实现.其递归相当于二叉树展开,因此假设 ...

  4. linux mysql 不稳定_linux,mysql:今天写出一个十分弱智的bug!

    今天写出一个十分弱智的bug,记录一下,提醒自己以后别这种犯错,不怕丢人哈~ 在写一个分页查询记录的sql时,要根据添加的时间逆序分页输出,之前的写法是酱紫: select record.a, y.c ...

  5. 分享下自己写的一个微信小程序请求远程数据加载到页面的代码

    分享下自己写的一个微信小程序请求远程数据加载到页面的代码 1  思路整理 就是页面加载完毕的时候  请求远程接口,然后把数据赋值给页面的变量 ,然后列表循环 2 js相关代码  我是改的 onload ...

  6. 用jQuery写的一个翻页,并封装为插件,

    用jQuery写的一个翻页,并封装为插件, 1 *{ 2 margin:0; 3 padding: 0; 4 list-style: none; 5 text-decoration: none; 6 ...

  7. 利用反射自己写的一个ModelHelper类

    开发中 很多人都会使用BLL Model这种开发,我也是,虽然现在有很多的自动生成工具,能在几秒内生成cs的模板,但我个人还不是很喜欢,我还是喜欢自己一个一个去写,这样更能了解自己的代码. 不过手动编 ...

  8. 我写了一个脚本,可在“任意”服务器上执行命令!

    冰河之前维护着上千台服务器组成的服务器集群,如果每次需要在服务器上执行命令的时候,都要手动登录每台服务器进行操作的话,那也太麻烦了.你想想,如果在上千台服务器的集群中,每台服务器中只需要简单的执行一个 ...

  9. 为了去重复,写了一个通用的比较容器类,可以用在需要比较的地方,且支持Lamda表达式...

    为了去重复,写了一个通用的比较容器类,可以用在需要比较的地方,且支持Lamda表达式,代码如下: public class DataComparer<T>:IEqualityCompare ...

  10. 写了一个puppet web 管理界面,打算开源

    2019独角兽企业重金招聘Python工程师标准>>> 写了一个puppet web 管理界面,打算开源 大家觉得怎么样 ? 转载于:https://my.oschina.net/u ...

最新文章

  1. MyBatis 和 Spring 中的 23 种设计模式,真香,拿去用吧!
  2. 如何理解subplot绘制不规则子图的参数设置
  3. 每秒8.8亿次请求!让数据存得起,看得见 - 云原生多模数据库Lindorm 2020双十一总结
  4. 「我去,这也能行!」令人惊叹的8个深度学习应用
  5. WPF 动态更换图片路径
  6. redhat oracle 开机自启动
  7. spring 事务隔离级别和传播行为_Java工程师面试1000题146-Spring数据库事务传播属性和隔离级别...
  8. javasrcipt的作用域和闭包(二)续篇之:函数内部提升机制与Variable Object
  9. 19软件班专业英语学期总结
  10. 基于JAVA+SpringMVC+Mybatis+MYSQL的实体店会员服务系统
  11. python类库31[使用minidom读写xml]
  12. 叶三《我们唱》-野孩子(白银饭店)
  13. 文件或目录损坏,详细教您文件或目录损坏且无法读取怎么办
  14. matlab fft 作图,Matlab绘图示例
  15. 如何提升码代码能力方法论漫谈
  16. 《机器人操作系统ROS原理与应用》——2.3 大数据制度和流程规范
  17. 信号分析——导数(Java/Matlab)
  18. ffmpeg 的那些坑
  19. 环状二肽,82863-65-8,cyclo(Leu-Tyr)
  20. 服务器系统会提示有神兽刷新吗,我的世界神奇宝贝服务器里刷新神兽提示是那些...

热门文章

  1. Python爬虫下载美女图片(不同网站不同方法)
  2. qcc烧录工具QCC30xx/QCC51xx全系列支持烧录工具qcc3020/3040/5124/5126qcc烧录软件
  3. Android带LOGO二维码生成
  4. 70部MAYA灯光材质渲染教程合集
  5. VHDL 实现一位全加器以及 Quartus II 初探
  6. Altera 在线资源使用
  7. 医院门诊管理系统php文献,医院门诊管理系统(源码+系统)
  8. 字典工具类 DictUtils 源码及分析
  9. 关于回归中国、反垄断等问题,Google CEO 亲口回应了
  10. FlashMX2004组件事件简单调试器