[已解决] 关于子函数之间互相调用的问题

[复制链接]
15096387411 发表于 2021-4-6 18:19:05
我在使用遗传算法进行优化问题时,在网上找到的代码基础上修改后遇到了问题:
我首先创建了一个随机矩阵作为初值:
x=zeros(100,7);
x(:,1)=ceil(40+25*rand(100,1));
x(:,2)=ceil(40*rand(100,1));
x(:,3)=ceil(40*rand(100,1));
x(:,4)=ceil(19*rand(100,1));
x(:,5)=ceil(20*rand(100,1));
x(:,6)=1.5+2*rand(100,1);
x(:,7)=0.5+rand(100,1);

接着将这些值赋值给f函数,然后调用另一个子函数 evaluate_objective
for i = 1 : N

    for j = 1 : V
        f(i,j) =x(i,j);

    end

f(i,V + 1: K) = evaluate_objective(f(i,:), M, V, aspen);
end

在子函数中的操作是将随机矩阵中每一行的数据分别赋值给外部程序计算一个目标函数的值,
function f = evaluate_objective(x, M, V, aspen)
aspen.Tree.FindNode("\Data\Blocks\B1\Input\NSTAGE").value=x(1);
aspen.Tree.FindNode("\Data\Blocks\B1\Input\FEED_STAGE\F1").value=x(2);
aspen.Tree.FindNode("\Data\Blocks\B1\Input\FEED_STAGE\F2").value=x(3);
aspen.Tree.FindNode("\Data\Blocks\B1\Input\REAC_STAGE1\#0").value=(x(4)+1);
aspen.Tree.FindNode("\Data\Blocks\B1\Input\HOLD_STAGE1\#0").value=(x(4)+1);
aspen.Tree.FindNode("\Data\Blocks\B1\Input\REAC_STAGE2\#0").value=(x(5)+x(4));
aspen.Tree.FindNode("\Data\Blocks\B1\Input\HOLD_STAGE2\#0").value=(x(5)+x(4));
aspen.Tree.FindNode("\Data\Blocks\B1\Input\BASIS_RR").value=x(6);
aspen.Tree.FindNode("\Data\Blocks\B1\Input\PRES1").value=x(7);

但是此时遇到了问题,这个x()是一个列向量,就是一次赋值了100个值,这是不允许的,因此我求助的是如何修改此代码可以让我一次只赋值一行?

最佳答案


TCCMATLAB 发表于 2021-4-6 18:44:53
实测一次可以赋值100行

回复此楼

2 条回复


TCCMATLAB 发表于 2021-4-6 18:44:53
实测一次可以赋值100行

Untitled_picture1.png
回复此楼

15096387411 发表于 2021-4-7 14:20:04
TCCMATLAB 发表于 2021-4-6 18:44
实测一次可以赋值100行

我后来自己解决啦,不过我不是想一次赋值一百行啦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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