找回密码
 注册
Simdroid-非首页
查看: 256|回复: 15

ga(遗传算法)优化计算中,计算结果显示“返回非实数”(return real value.)

[复制链接]
发表于 2009-10-16 19:15:02 | 显示全部楼层 |阅读模式 来自 清华大学
本帖最后由 messenger 于 2009-10-26 23:08 编辑

我用遗传算法,写一个非线性等式约束,运行时提示错误:
GA running.
Error using ==> gads\private\constrValidate at 25
Constraint function must return real value.


源文件:function [c,ceq]=constraint(A)
c=1;
ceq=-0.6547*(-0.5773)/A(1)+1.327*0.28867/A(2)+(-0.5)*0.5773/A(3)+1.077*(-0.5773)/A(4)+0.5*0.5773/A(5)+0.8273*0.2887/A(6)+(-1.655)*(-0.5773)/A(7)-1;
end


希望高手解答,谢谢
发表于 2009-10-16 21:52:27 | 显示全部楼层 来自 浙江杭州
Simdroid开发平台
你这个问题是因为约束函数返回了非实数值。可能是因为表达式计算出现了复数,也可能是你的命令代码哪个地方写错了,因为你的代码没有贴全,现在也搞不清楚。

你可以试试,将计算式用real命令强制取实部,看看是否还出现错误提示,即
ceq=real(-0.6547*(-0.5773)/A(1)+1.327*0.28867/A(2)+(-0.5)*0.5773/A(3)+1.077*(-0.5773)/A(4)+0.5*0.5773/A(5)+0.8273*0.2887/A(6)+(-1.655)*(-0.5773)/A(7)-1);
回复 不支持

使用道具 举报

发表于 2009-10-17 12:04:47 | 显示全部楼层 来自 河北唐山
如果这样强取实部的话会不会造成最后计算不精确呢?或者说取了实部,还能起到预先想要的约束效果吗?
第二个问题,不做任何修改,使用fmincon函数优化时可以得到结果,也没什么提示,二者有什么区别,哪个更好些 2# messenger
回复 不支持

使用道具 举报

发表于 2009-10-17 12:14:36 | 显示全部楼层 来自 浙江杭州
3# zhaochunyu347

取实部不是说一定可以得到正确的结果,而是要发现问题所在。

ga优化要求约束函数为实数,这在help中说得很清楚,而且是以note的形式特别强调。
回复 不支持

使用道具 举报

 楼主| 发表于 2009-10-17 13:10:53 | 显示全部楼层 来自 清华大学
加了real还是有相同的错误,

我的目标函数文件是:
function V=func_GA(A)
V=(A(1)+A(2)+A(3)+A(4)+A(5)+A(6)+A(7));
end

约束函数文件是:
function [c,ceq]=constraint(A)
c=1;
ceq=(-0.6547*(-0.5773)/A(1)+1.327*0.28867/A(2)+(-0.5)*0.5773/A(3)+1.077*(-0.5773)/A(4)+0.5*0.5773/A(5)+0.8273*0.2887/A(6)+(-1.655)*(-0.5773)/A(7)-1);
end

帮助看看有什么问题,谢谢高手帮助啦

2# messenger
回复 不支持

使用道具 举报

发表于 2009-10-17 16:46:58 | 显示全部楼层 来自 河北唐山
如果在约束条件为复数的情况下用fmincon计算出来对吗? 4# messenger
回复 不支持

使用道具 举报

发表于 2009-10-17 21:23:07 | 显示全部楼层 来自 浙江杭州
5# bigfeatheryu


最好把ga优化命令也给出,比如初值什么的,这样别人可以重复问题,以利发现问题所在。


加了real还是有相同的错误,

我的目标函数文件是:
function V=func_GA(A)
V=(A(1)+A(2)+A(3)+A(4)+A(5)+A(6)+A(7));
end

约束函数文件是:
function [c,ceq]=constraint(A)
c=1;
ceq=(-0.6547*(-0.5773 ...
bigfeatheryu 发表于 2009-10-17 13:10
回复 不支持

使用道具 举报

发表于 2009-10-17 21:27:43 | 显示全部楼层 来自 浙江杭州
6# zhaochunyu347


没试过,你自己查一下帮助吧。不过,如果你本身表达式应该为实数,计算出来却是复数,应该找出问题所在,否则稀里糊涂地按复数计算也不会正确。另外,如果用real命令也会出来那个错误提示,显然不是出现复数的问题。

如果在约束条件为复数的情况下用fmincon计算出来对吗? 4# messenger
zhaochunyu347 发表于 2009-10-17 16:46
回复 不支持

使用道具 举报

 楼主| 发表于 2009-10-17 22:14:39 | 显示全部楼层 来自 清华大学
我用的GUI界面,没用命令格式,貌似GA不用给初值把?
7# messenger
回复 不支持

使用道具 举报

发表于 2009-10-18 08:55:16 | 显示全部楼层 来自 河北唐山
还有个问题就是约束条件可以互相约束吗?就是说第一个约束条件确定了一个变量a的范围,第二个约束条件用到变量a,此时的a是题目本身的范围还是约束条件一确定的范围
谢谢!! 8# messenger
回复 不支持

使用道具 举报

发表于 2009-10-18 11:37:38 | 显示全部楼层 来自 浙江杭州
9# bigfeatheryu

报歉,命令搞混了。另外,你的约束函数里的,c=1;是什么?

我用的GUI界面,没用命令格式,貌似GA不用给初值把?
7# messenger
bigfeatheryu 发表于 2009-10-17 22:14
回复 不支持

使用道具 举报

发表于 2009-10-18 11:41:20 | 显示全部楼层 来自 浙江杭州
10# zhaochunyu347

应该可以吧。比如优化中经常遇到,a<0,b<a的情况,这样b也<0呀。

还有个问题就是约束条件可以互相约束吗?就是说第一个约束条件确定了一个变量a的范围,第二个约束条件用到变量a,此时的a是题目本身的范围还是约束条件一确定的范围
谢谢!! 8# messenger
zhaochunyu347 发表于 2009-10-18 08:55
回复 不支持

使用道具 举报

 楼主| 发表于 2009-10-20 21:56:34 | 显示全部楼层 来自 清华大学
约束函数要求返回c,和ceq,并且将c的表达式大于零,ceq的表达式等于零作为GA的优化的约束条件。
11# messenger
回复 不支持

使用道具 举报

发表于 2009-10-21 15:31:58 | 显示全部楼层 来自 浙江杭州
13# bigfeatheryu

c=1;,你这么写是错的吧,如果没记错的话,这不是要求约束函数1<0吗?

约束函数要求返回c,和ceq,并且将c的表达式大于零,ceq的表达式等于零作为GA的优化的约束条件。
11# messenger
bigfeatheryu 发表于 2009-10-20 21:56
回复 不支持

使用道具 举报

 楼主| 发表于 2009-10-23 20:29:27 | 显示全部楼层 来自 清华大学
本文题已经解决,自变量下限不能是0

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-2-16 16:32:49 | 显示全部楼层 来自 香港
同样问题,也解决,自变量下限不能为0
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-5 01:24 , Processed in 0.038103 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表