在PlatEMO v2.9中增加多模态多目标算法(2)
2021/11/25 22:11:37
本文主要是介绍在PlatEMO v2.9中增加多模态多目标算法(2),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
上小节(在PlatEMO v2.9中增加多模态多目标算法(1))中,我已经在PlatEMO v2.9
的框架中增加了属性和方法,在该小节我们需要改调用计算指标那部分代码,以保证PlatEMO v2.9
中增加多模态多目标算法后,不会影响其他算法的运行。
了解传入参数情况
在GUI
文件夹中Modules
的module_test
中cb_metricList()
方法传入的参数是PopObj
和PF
,对应的代码分别是obj.data(current).result{end,2}
和obj.data(current).Global.PF
%% Calculate the metric value of the final population function cb_metricList(obj,hObject,eventdata) current = obj.control.resultList.index; if current > 0 && ~isempty(obj.data(current).result) metric = obj.control.metricList.string; if ~isfield(obj.data(current).metric,metric) obj.data(current).metric.(metric) = obj.Metric(str2func(metric),obj.data(current).result{end,2},obj.data(current).Global.PF); end obj.control.metricLabel.handle.String = sprintf('%.4e',obj.data(current).metric.(metric)); else obj.control.metricLabel.handle.String = ''; end end
增加传入参数
在GUI
文件夹中Modules
的module_test
中cb_metricList()
方法中我们需要传入PopObj
、PF
、PopDec
、PS
、fname
和repoint
,增加的代码如下:
%% Calculate the metric value of the final population function cb_metricList(obj,hObject,eventdata) current = obj.control.resultList.index; if current > 0 && ~isempty(obj.data(current).result) metric = obj.control.metricList.string; if ~isfield(obj.data(current).metric,metric) obj.data(current).metric.(metric) = obj.Metric(str2func(metric),{obj.data(current).result{end,2},obj.data(current).Global.PF,obj.data(current).result{end,3},obj.data(current).Global.PS,obj.data(current).Global.fname,obj.data(current).Global.repoint}); end obj.control.metricLabel.handle.String = sprintf('%.4e',obj.data(current).metric.(metric)); else obj.control.metricLabel.handle.String = ''; end end
更改module中的代码
由于module_test
中cb_metricList()
方法会跳到module
类的Metric()
方法中,我们需要对Metric()
中的内容进行更改,更改情况如下:
%% Calculate the specified metric value of a population function value = Metric(obj,metric,Parameter) [PopObj,PF,PopDec,PS,fname,repoint] = deal(Parameter{:}); if isa(PopObj,'INDIVIDUAL') PopObj = PopObj(all(PopObj.cons<=0,2)).objs; end NonDominated = NDSort(PopObj,1) == 1; try value = metric({PopObj(NonDominated,:),PF,PopDec(NonDominated,:),PS,fname,repoint}); catch value = NaN; end end end
下一个小节我会展示更改后PlatEMO v2.9
的计算指标的代码,以保证与这节修改代码的接口相同。
这篇关于在PlatEMO v2.9中增加多模态多目标算法(2)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南