请教一下遗传算法中罚函数的问题

S20100362 2012-03-15 02:31:49
举个最简单的例子吧:

目标函数:f(x)=5x1+4x2+6x3
而上下限约束为:
0<x1<100
0<x2<80
0<x3<70
10<x4<85

最关键的一点,x1+x2+x3=100。

上述例子中的值是我随便编的,不一定对,就是想问下,罚函数应该怎么处理,关于罚函数我不是很懂。

仅仅有上下限约束的问题我会做,就不不知道怎么保证他们加起来等于100
...全文
1265 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
alexander_david 2012-03-16
  • 打赏
  • 举报
回复
寻找使F(x1, x2, x3, x4)取值最小的点(x1, x2, x3, x4)
alexander_david 2012-03-16
  • 打赏
  • 举报
回复
假设适应度函数取最小值(如果取最大值,取倒数,但是要注意分子是0的点)f(x1, x2, x3, x4),那么可以设计增广的适应度函数:

F(x1, x2, x3, x4)=f(x1, x2, x3, x4)+|x1-a|+|b-x1|+|x2-c|+|d-x2|+|x3-e|+|f-x3|+|x4-g|+|h-x4|
+|x1+x2+x3-100|

当然后面的惩罚项也可以乘以适当的系数。
[a, b], [c, d], [e, f], [g, h]是4个自变量的取值范围。
S20100362 2012-03-15
  • 打赏
  • 举报
回复
能给个具体的函数么,书上也这么说,但是从来没例题。。。
alexander_david 2012-03-15
  • 打赏
  • 举报
回复
那就偏离的越远,适应度函数越小。
S20100362 2012-03-15
  • 打赏
  • 举报
回复
不行啊,这样的话就是丢弃策略,而我就是想用罚函数的啊
alexander_david 2012-03-15
  • 打赏
  • 举报
回复
应该和上下限约束是同样处理吧?

就是搜索到新的解:x1, x2, x3, x4之后,检测这四个解的范围,如果超范围,则放弃,然后接着检测x1+x2+x3=100,如果不满足,那么也丢弃,然后重新生成解,直到获取指定数量的合法解。

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧