[已解决] GA工具箱提示未定义函数或变量

[复制链接]
cissy0202 发表于 2022-2-22 16:44:13
本帖最后由 cissy0202 于 2022-2-22 21:16 编辑

求解的模型是:
模型.png
使用GA工具箱运行时出现以下提示:
-----------------------------
Optimization running.
Error running optimization.
未定义函数或变量 'y1'。 GA工具箱.png

我自己在论坛搜到过类似的问题,参考前辈的解法是目标函数里少了变量的定义。但是我的目标函数里已经对y1有定义,不知道为什么还是提示未定义。请大神们支招,谢谢啦!
目标函数如下:

  1. function y=Ava(x)
  2. tpm=0.5;         
  3. tcm=1;            
  4. a=12042;         
  5. b=3.142;         
  6. alpha=0.5;        
  7. N=x(1);           
  8. T=x(2);           
  9. for i=1:N         
  10.     lambda= @(t)b/a*((t-alpha*i*T)/a).^(b-1);         
  11.     y1(i)=integral(lambda,(i-1)*T,i*T);               
  12. end
  13. y2=sum(y1)*tcm;         
  14. y3=(N-1)*tpm;           
  15. y=-1/(1+(y2+y3)/(N*T))   
  16. end

复制代码
约束函数

  1. function [c,ceq]=con_Ava(x)
  2. alpha=0.5;
  3. N=x(1);
  4. T=x(2);
  5. c(1)=(N-alpha*(N-1))*T-7493;
  6. c(2)=(-1)*(N-alpha*(N-1))*T+5406;
  7. c(3)=N*T-90000;
  8. ceq=[];
  9. end

复制代码












最佳答案


TouAkira 发表于 2022-2-22 20:33:27
你的目标函数写的有问题。
N=x(1); % 这句令 N 为输入的第一个值
for i=1:N   % 而for循环控制变量 i 为不大于 N 的整数
注意到问题了么?一旦你的输入 x 的第一个值比 1 小,那么 for 循环就会因控制变量为空集而不会被执行,y1自然就没有被赋过值,会出错。
回复此楼

4 条回复


TouAkira 发表于 2022-2-22 20:33:27
你的目标函数写的有问题。
N=x(1); % 这句令 N 为输入的第一个值
for i=1:N   % 而for循环控制变量 i 为不大于 N 的整数
注意到问题了么?一旦你的输入 x 的第一个值比 1 小,那么 for 循环就会因控制变量为空集而不会被执行,y1自然就没有被赋过值,会出错。
回复此楼

cissy0202 发表于 2022-2-22 21:06:31
TouAkira 发表于 2022-2-22 20:33
你的目标函数写的有问题。
N=x(1); % 这句令 N 为输入的第一个值
for i=1:N   % 而for循环控制变量 i 为不 ...

我在GA工具箱里增加了线性约束,果然不再报错,手动点赞100086次!!!!
但是每次运行的结果都不一样,且差别很大,这个有解决措施吗?

TouAkira 发表于 2022-2-22 21:15:50
cissy0202 发表于 2022-2-22 09:06
我在GA工具箱里增加了线性约束,果然不再报错,手动点赞100086次!!!!
但是每次运行的结果都不一样, ...

如果只是想确保每次结果都一样,在代码前面用
rng default
把随机种子值固定。
优化工具箱的很多函数本来就是启发式算法,以一定的随机性来使目标尽可能收敛到全局最优,只不过如果函数复杂含有多个极值时,多次运算可能会收敛到不同的局部最小,导致了差异。一般还是以不同随机种子值多运行几次,对比每次的结果,选其中最优的那个结果。

cissy0202 发表于 2022-2-22 21:39:23
TouAkira 发表于 2022-2-22 21:15
如果只是想确保每次结果都一样,在代码前面用
rng default
把随机种子值固定。

受教了,多谢指导。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表