bimk / platemo Goto Github PK
View Code? Open in Web Editor NEWEvolutionary multi-objective optimization platform
Evolutionary multi-objective optimization platform
Hi,
I'm looking for the DAS-CMOPs (Difficulty Adjustable and Scalable Constrained Multi-objective Test Problems) toolkit implementation (https://arxiv.org/abs/1612.07603).
While there are many benchmarking of multi and many objective problems, there are few options for working with many constraint problems. So, including these problems in PlatEMO would be a good contribution to cover this gap in the framwork.
I take this opportunity to thank all the project staff!
Thank you in advance.
Arthur,
Hello,
Is there a recommended way to implement other termination criteria ?
The Global method NotTermination
only account for number of function evaluations, which is not desirable in many cases, as, for a given budget, an EMO practitioner may want to restart the algorithm once it has reached a "stationary" state.
Thanks for your advices
Hello,
First thanks for providing this great tool to EMO researches and practitioners.
I'm using PlatEMO to benchmark algorithms on a real-world many-objective problem (and may submit a pull request soon if you'd like to see this added to the problems library).
This issue is about the PF
function, which aims at "sampling reference points on the true Pareto Front". This is not possible here as we don't know the true PF, but still I could compare results from a single algorithm with an empirical reference set from union of optimal populations from many algorithms, runs ...
My question is: what would be the best practice to make this functional with existing code ? Having a reference_set.mat
file in the problem folder that I load at Initialization and return it in the PF
function ? I'm asking as I looked for an example in the existing problems, and it seems most of them (at least the one I checked) build a Pareto Front from analytical formulas.
Thanks in advance
I want to solve a multi-objective integer programming, what method can I use in platEMO?
function MOEADGR(Global)
%
% Wang, Z., Zhang, Q., Gong, M., & Zhou, A. (2014, July).
% A Replacement Strategy for Balancing Convergence and Diversity in MOEA/D
% In 2014 IEEE Congress on Evolutionary Computation (CEC) (pp. 2132-2139). IEEE.
% delta --- 0.8 --- The probability of choosing parents locally
% operator --- DE
%--------------------------------------------------------------------------
% Copyright (c) 2016-2017 BIMK Group. You are free to use the PlatEMO for
% research purposes. All publications which use this platform or any code
% in the platform should acknowledge the use of "PlatEMO" and reference "Ye
% Tian, Ran Cheng, Xingyi Zhang, and Yaochu Jin, PlatEMO: A MATLAB Platform
% for Evolutionary Multi-Objective Optimization [Educational Forum], IEEE
% Computational Intelligence Magazine, 2017, 12(4): 73-87".
%--------------------------------------------------------------------------
`
% Written by Lucas Farias
%% Parameter setting
[delta] = Global.ParameterSet(0.8);
%% Generate the weight vectors
[W,Global.N] = UniformPoint(Global.N,Global.M);
% Size of neighborhood
T = ceil(Global.N/10);
%% Detect the neighbours of each solution
B = pdist2(W,W);
[~,B] = sort(B,2);
B = B(:,1:T);
%% Generate random population
Population = Global.Initialization();
Z = min(Population.objs,[],1);
%% Optimization
while Global.NotTermination(Population)
for i = 1 : Global.N
% Choose the parents
if rand < delta
P = B(i,randperm(size(B,2)));
else
P = randperm(Global.N);
end
% Generate an offspring
Offspring = Global.Variation(Population([i,P(1:2)]),1,@DE);
% Update the ideal point
Z = min(Z,Offspring.obj);
% Global Replacement
all_g_TCH=max(abs((Offspring.obj-repmat(Z,Global.N,1)).*W),[],2);
best_g_TCH=min(all_g_TCH);
Chosen_one = find(all_g_TCH(:,1)==best_g_TCH);
P = B(Chosen_one(1),randperm(size(B,2)));
% Update the solutions in P by Tchebycheff approach
g_old = max(abs(Population(P).objs-repmat(Z,length(P),1)).*W(P,:),[],2);
g_new = max(repmat(abs(Offspring.obj-Z),length(P),1).*W(P,:),[],2);
Population(P(find(g_old>=g_new,T))) = Offspring;
end
end
end`
Dears , i'm trying to compare result for different algorithms EMOCA vs NSGA ll , and i did not find EMOCA algorithm included , i attached the original paper for EMOCA algorithm so could anyone describe to me if is included under another name ?? or what !!
An Evolutionary Multi-Objective Crowding Algorithm (EMOCA).pdf
When I execute PlatEMO with GUI using the new version, I always obtain the following message:
"The algorithm terminates unexpectedly, please refer to the command windows for details"
Can anyone help me?
Thank you very much in advance.
Can you give an example about how to use parameter 'outputFcn' in main function without GUI.
The format is like below:
when i make experiments on zdt problem, i found zdt1,2,3,4,6 is definited wrongly, but don't know if other problem is also wrong
from https://sop.tik.ee.ethz.ch/download/supplementary/testproblems/zdt1/index.php
In zdt1
false
function PopObj = CalObj(obj,PopDec) PopObj(:,1) = PopDec(:,1); g = 1 + 9 * sum(PopDec(:,2:end),2); h = 1 - (PopObj(:,1)./g).^0.5; PopObj(:,2) = g.*h; end
true
function PopObj = CalObj(obj,PopDec) PopObj(:,1) = PopDec(:,1); g = 1 + 9 / (size(PopDec,2)-1) * sum(PopDec(:,2:end),2); h = 1 - (PopObj(:,1)./g).^0.5; PopObj(:,2) = g.*h; end
what is the usage of function 'PF'? where is it invoked?
I read your paper about PlatEMO, PlatEMO is very useful. But I want to learn some specific algorithms, such as NSGA-2. These original codes can help me understand the idea of the algorithm.I really need the original code, thank you very much!
Describe the bug
Open application and type main
in the command line, the GUI will hang and application not responding.
Expected behavior
GUI should start regularly.
Screenshots
If applicable, add screenshots to help explain your problem.
Desktop (please complete the following information):
Hi, I was trying to run PlatEMO in GUI mode by invoking main()
with no arguments and then I got error:
>> main()
Index exceeds matrix dimensions.
Error in GUI/readList2
Error in GUI/readList
Error in GUI
Error in main (line 43)
GUI();
However running in command mode is ok. The version of MATLAB I used is R2017a and I wonder if PlatEMO is compatible with this version of MATLAB?
receive parameter settings from users for metrics function.
For preference-based evolutionary multiobjective optimization, it is necessary to receive parameter settings from users for metric calculation, like R-HV, R-IGD from [1]. While, this is not feasible in present PlatEMO.
[1] R-Metric: Evaluating the Performance of Preference-Based Evolutionary Multiobjective Optimization Using Reference Points
Is your feature request related to a problem? Please describe.
I want to add a problem having external inputs besides the global ones. And I have done some work previously, but it did not work. Therefore, I want some help, or could you please give me an example?
Describe the solution you'd like
My aim is to integrate the optimization into other MATLAB codes, and some known parameters should be delivered to the problem to implement the optimization.
Describe alternatives you've considered
I know the combinatorial MOPs have some parameters which should be read before the optimization, but it may cost much time to save and load the data to obtain the wanted results. Therefore, I want to define those external parameters in other m file. The definitions I have done a re follows:
This is a classdef function to define and get the parameters:
classdef REParameters < handle
properties(SetAccess = private)
Pb;
cjgl;
T;
C;
singlepaths;
V;
Pes;
RLES;
end
methods
function obj = GetObj(obj)
persistent ReParameters;
if nargin > 0
ReParameters = obj;
else
obj = ReParameters;
end
end
end
end
To integrate these parameters into the problem, I modified the PROBLEM.m file as follows:
properties(SetAccess = private)
Global; % The current GLOBAL object
ReParameters;
end
methods(Access = protected)
%% Constructor
function obj = PROBLEM()
obj.Global = GLOBAL.GetObj();
obj.ReParameters = PEParameters.GetObj();
end
...
However, it did not work with errors (No static function GetObj exists in REParameters). Could you help me to improve the work?
Describe the bug
In the ParEGO algorithm, the selected updating point should have the highest EI value, but has the lowest EI value in current implementation.
original code
EvolALG.m file, Line 29 : [~,index] = sort(EI,'descend');
corrected code
EvolALG.m file, Line 29 : [~,index] = sort(EI,'ascend');
The performance of ParEGO improves significantly after the correction.
Offspring = Operator(Population,{5555,5555});
{5555,5555}换成{0,1}会不会更合理
I tried making a sensitivity analysis of NSGAIII and MOEAD using PlatEMO, and the HV rarely results more than 0, if using the DTLZ3 problem.
This didn't happen using the previous version of the Hypervolume calculation.
In case I can try giving the dumps of the GLOBAL variable if needed ( I have a few hundred of those )
Describe the bug
A clear and concise description of what the bug is.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.
Desktop (please complete the following information):
Smartphone (please complete the following information):
Additional context
Add any other context about the problem here.
MATLAB 2019
Dear community,
I want to compare the NSGA-III performance using PlatEMO and the results of author's paper. However, I have the doubt whether the evaluation is. Evaluation=generation?
Best regards,
Felipe
Problem:
Since the method Global.Variation does not exist any more, the call in the WOF-SMPSO algorithm produces an error as follows:
No appropriate method, property, or field 'Variation' for class 'GLOBAL'.
Error in WOFSMPSO>fillPopulation (line 172)
Offspring = Global.Variation(input(MatingPool),amountToFill);
Simply changing the call to GA() does not solve the issue entirely, because then only even numbers of offspring are produced, which sometimes does not fill the population with the desired amount of solutions.
Proposed solution:
I think this error can be fixed by changing lines 171, 172 and 173 in the file "WOF-SMPSO" as following:
line 171: MatingPool = TournamentSelection(2,amountToFill+1,FrontNo,-CrowdDis);
line 172: Offspring = GA(input(MatingPool));
line 173: Population = [Population,Offspring(1:amountToFill)];
Hi, the platemo report "too many args error" when using the command "platemo('algorithm',@NSGAII, 'problem',@Imop1, 'maxFE', 100000)". I found the construction function of Problem and Algorithm don't work well, see line:74 and 79 in platemo.m.
function Score = Hausdorff(PopObj,PF)
%
% Averaged Hausdorff Distance
%O. Schutze, X. Esquivel, A. Lara, and C. A. C. Coello,
%“Using the averaged hausdorff distance as a performance
%measure in evolutionary multiobjective optimization,”
%IEEE Trans. Evol. Comp, vol. 16, pp. 504–522, Aug. 2012.
%--------------------------------------------------------------------------
% Copyright (c) 2016-2017 BIMK Group. You are free to use the PlatEMO for
% research purposes. All publications which use this platform or any code
% in the platform should acknowledge the use of "PlatEMO" and reference "Ye
% Tian, Ran Cheng, Xingyi Zhang, and Yaochu Jin, PlatEMO: A MATLAB Platform
% for Evolutionary Multi-Objective Optimization [Educational Forum], IEEE
% Computational Intelligence Magazine, 2017, 12(4): 73-87".
%--------------------------------------------------------------------------
% Written by Thiago Santos professor.ufop.br/santostf
cGD = GD(PopObj,PF);
cIGD = IGD(PopObj,PF);
Score = max(cGD,cIGD);
end
PlatEMO v3.0 does not support matlab lower than 2020b. It would be nice to have a version that support older matlab with latest algorithms and problems.
**CMaOPs are needed **
At present, most of the constraint problems on platEMO are CMOP. As DAS-CMOP has been updated, I sincerely hope that platEMO can update DAS-CMaOPs.
I'm always frustrated when I try to see the plot of high-dimensional points using parallel coordinates. I wish you could use Nasseh method (https://doi.org/10.1016/j.asoc.2019.105722). Despite the parallel coordinates' popularity, it might not be the best choice as it is not compatible with our previous understanding of up-to-three dimensional points as dots. Using Nasseh method is a proper alternative to parallel coordinates in such cases as it visualizes high-dimensional points as tailed dots.
MPSOD C. Dai, Y. Wang, and M. Ye, A new multi-objective particle swarm optimization algorithm based on decomposition, Information Sciences, 2015, 325: 541-557.
% Note that here the value of each solution on each vector is not the
% cosine value which is proposed in the paper
PopObj = Population.objs - repmat(Z,length(Population),1);
Value = PopObj*W';
[~,P] = max(Value,[],2);
there are not calculate the cosine value, will affect the sub-region as the original paper?
Are the results are same as cosine value?
Hello,
Is there a way in the code to adjust the precision of the floating-point numbers displayed in the metrics results table?
E.g: 1.2345 -> 1.24
Thanks
It will be great to have some basic implementation of single objective GA/ES as then PlatEMO can be a one stop solution for evolutionary optimization!
I want to calculate real-world-like optimization problems below.
(1)the two‐objective welded beam design problem
(2) the car side impact problem
Do these source codes exist ?
Hello, which algorithm is better in most cases? Which algorithm is better for optimization of ultra-high dimensions such as 50 dimensions?
It could be possible to use the variables in Search Space on metrics functions instead of Pareto Front only.
Dear PlatEMO team,
First of all, thank you for providing such a powerful tool for free. PlatEMO seems a very useful piece of software.
I am new to MO in general and to this framework in particular. I am facing a problem of bounds with MOEAD and my custom problem. Namely, PlatEMO tries to evaluate an individual that is definitely out of range and makes my cost function to fail. This is the command that I run:
main('-algorithm', @MOEAD, '-problem', @NC_MO_GRC_BL, '-N', 300, '-evaluation', 50000, '-save', 1);
The referred problem defines its own bounds as follows in its constructor:
bounds = zeros(10, 2);
bounds(1,:) = [-0.000000001 0.000000001]; % a
bounds(2,:) = [-0.02 0.02]; % V_Peak (espike)
bounds(3,:) = [-0.06 -0.02]; % V_T (eth)
bounds(4,:) = [-0.000000001 0.000000001]; % b
bounds(5,:) = [0.0000000000001 0.000000000005]; % C_m (cm)
bounds(6,:) = [-0.08 -0.04]; % E_L (erest)
bounds(7,:) = [0.000000000001 0.00000001]; % g_L (grest)
bounds(8,:) = [0.001, 1]; % Delta_T (delta_t)
bounds(9,:) = [0.001, 1]; % T_w (tw)
bounds(10,:) = [-0.08 -0.04]; % V_r (vreset)
obj.Global.lower = bounds(:,1)'; % From column to row vector
obj.Global.upper = bounds(:,2)';
And everything starts running fine, but at certain point, it seems that PlatEMO's MOEAD generates and tries to evaluate some individuals that are out of range. I added this code to the problem file (CalObj method) to catch the error:
try
v = NC_MO_ObjFunc(Pop(i, :), obj.pyContext); % My external cost function
catch ME
disp('Bad individual:');
format hex;
disp(Pop(i, :));
format short;
rethrow(ME);
end
PopObj(i,:) = [v(1), v(2)];
And the individual is:
Bad individual:
Columns 1 through 9
be0ea6fe14510cc1 3f8f19ea69bed28d bfae165eab635fb0 3e059d71343b3773 3d92bceaf3850f88 bfad29916ac09a9c 3dfde2294d57b250 3f8f6ea8673f4ae0 3fec637b3018db68
Column 10
bfb3086046e6e2e8
After converting it to decimal we have:
>> BadBoy = [ hex2dec('be0ea6fe14510cc1'), ...
hex2dec('3f8f19ea69bed28d'), ...
hex2dec('bfae165eab635fb0'), ...
hex2dec('3e059d71343b3773'), ...
hex2dec('3d92bceaf3850f88'), ...
hex2dec('bfad29916ac09a9c'), ...
hex2dec('3dfde2294d57b250'), ...
hex2dec('3f8f6ea8673f4ae0'), ...
hex2dec('3fec637b3018db68'), ...
hex2dec('bfb3086046e6e2e8')];
>> BadBoy
BadBoy =
1.0e+19 *
1.3695 0.4580 1.3812 0.4469 0.4437 1.3812 0.4467 0.4580 0.4606 1.3813
As you can see, the decision vector is out of bounds (upper), and it causes my cost function to fail.
Am I missing anything? According to the PlatEMO manual on page 16:
(...) Firstly, for continuous MOPs, it may be greater than the upper bound GLOBAL.upper or less
than the lower bound GLOBAL.lower, in this case it will be set to the boundary value
by INDIVIDUAL class, while MOP classes need not handle this case. (...)
So my MOP class, i.e., NC_MO_GRC_BL, does not handle the out of bounds case. In fact, I have manually tried to build an individual from the previous out of bounds case, and , as expected, the INDIVIDUAL's constructor seems to filter properly:
>> my_ind = INDIVIDUAL(BadBoy);
63 obj(1,size(Decs,1)) = INDIVIDUAL;
K>> isequal(Decs, Global.upper)
ans =
logical
1
Thus, I suppose that decision variables are moved far away at a different point within MOEAD.
Do you have any suggestion? Am I doing anything wrong?
Thank you very much for your help in advance
why the method for updatepbest for mopso-cd and smpso is different?
function P=PF(obj, N)
P=[ ];
end
In test problems.
By letting P empty. Errors of Index are Thrown.
How to avoid reference front on Graph and calculations.
Hi BIMK PlatEMO team, first of all my deepest gratitude for the awesome framework.
I'd like to know if there's any example to do parameter tuning, especially in parallel just like in the GUI? Because in the manual, vectorized parameters are only for MOP not for MOEA, so parameter tuning must be done manually for each parameter setting (CMIIW?) I've tried to read the manual and the GUI modules but I still can't wrap my head around how to do it, especially I'm afraid that the GLOBAL class might be shared among parallel worker and mess up the results.
in short: i want to do a parfor loop to tune parameters and write its result to a file, is there any example on how to do it?
Thank you so much
Hi,
I'm writing a paper and I need to reference the non-dominated sorting strategy used by PlatEMO in constrained problems.
Does someone know about it (In addition to the PlatEMO paper itself...)?
Thanks in advance!
Hi, I am having some issues while running experiments with PlatEMO without GUI. After finishing running it only returns the values: metric and result, but metric contains only runtime.
Is there a way to specify the metric without GUI?
Thanks in advance.
do you have examples for minlp(mixed integer nonlinear program)?
So i want to use PlatEMO for research and i am trying to add a custom algorithm based on NSGAII. I created a new folder (Boris) and copy pasted the contents of NSGAII into it. I also changed the name of the main file from NSGAII to Boris. I then tried to use it with the GUI but it is not in the list of algorithms.I can however run it outside the GUI by using the main method. How can i add this algorithm so it shows up in the GUI?
Thank you for your time.
Describe the bug
Implementation of constraint function g in IMMOEA_F* is wrong
To Reproduce
Steps to reproduce the behavior:
For example, in IMMOEA_F1.m:
https://github.com/BIMK/PlatEMO/blob/b7be97a7a49dbeb1f799e101e84dd45935a56de3/PlatEMO/Problems/MOPs%20in%20IM-MOEA/IMMOEA_F1.m#L32-33
t = (1+5*repmat(2:D,size(X,1),1)/D).X(:,2:D) - repmat(X(:,1),1,D-1);
g = 1 + 9mean(t.^2,2);
Expected behavior
t should be ((1+5)*repmat...)
according to the paper:
A Multiobjective Evolutionary Algorithm using Gaussian Process-based Inverse Modeling
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.