成objconstr传递了额外的参数

2视图(30天)
你好,
我使用surrogateopt()函数,如下所示:
functionPointer = @cost;
objconstr = packfcn (functionPointer, []);
选择= optimoptions (“surrogateopt”,
“PlotFcn”,“surrogateoptplot”,
“MaxFunctionEvaluations”,500,
“CheckpointFile”,“\ checkpoint.mat”);
乌兰巴托= (100 100 100);
磅= (0 0 0);
intcon = (1 2 3);
[k fval exitflag、输出试验]= surrogateopt (objconstr、磅、乌兰巴托、intcon选项);
surrogateopt()函数需要类 objconstr 。在创建 objconstr 对象的函数指针传递:
functionPointer = @cost;
objconstr = packfcn (functionPointer, []);
根据文档,只有参数传递到成本函数是变量用于直接计算成本。这个变量是受限的 乌兰巴托 一个 变量。如果可能的话,我想通过在另一个inpur可变成本函数(两个输入而不是一个)。为了说明我的请求,见下面所需的代码:
functionPointer = @cost (k, desiredObject);
objconstr = packfcn (functionPointer, []);
根据我的了解MATLAB处理函数指针,这种行为应该是可能的。然而,我必须修改代码 surrogateopt () 调用这个函数指针。任何解决这个问题 没有 修改 surrogateopt () 会很有帮助。
谢谢你!
伊森

答案(1)

史蒂文的主
史蒂文的主 2021年9月8日
适应的例子 文档页面 packfcn :
ros = @ (x, k) k * x (x (2) - (1) ^ 2) ^ 2 + (1 - x (1)) ^ 2;%添加一个参数k
objconstr = packfcn (@ (x) ros (x, 100), @unitdisk);% k = 100 k的值修正
2磅= [2];
乌兰巴托=磅;
[x, fval] = surrogateopt (objconstr磅,乌兰巴托);%解决的例子
函数测查[c] = unitdisk (x)
c = x (1) ^ 2 + (2) ^ 2 - 1;
测查= [];
结束
这是所示的技术之一 的文档 传递额外的参数为一个函数,将传递给一个优化,找到根源,ODE求解器或其他类型的“功能函数”。
1评论
伊桑•戈尔茨坦
伊桑•戈尔茨坦 2021年9月8日
第二个参数是一个约束优化算法中使用。我希望传递的参数将未使用的算法。
packfcn (@ (x) ros (x, 100), @unitdisk)
此外,我传入的对象是自我引用指针:
函数输出成本= (app, k)
app.writeToStatusText (“成本评估!”);
输出k = k (1) * (2) * k (3);
结束
这个成本函数是同一个类的一个成员。运行时 surrogateopt () 我得到以下警告:
警告:不能保存应用程序设计师应用对象。保存不支持金宝app
matlab.apps。AppBase对象。
警告:在加载一个类的对象“TemperatureAutoTune”:
不能加载应用设计师应用对象。负载不支持金宝app
matlab.apps。AppBase对象。
surrogateopt () 试图加载/保存对象的成员。有办法防止这种行为,同时通过对象指针?

登录置评。

类别

找到更多的在代理优化帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的