项目作者: sovrasov

项目描述 :
Constrained multi-objective derivative-free global solver
高级语言: C++
项目地址: git://github.com/sovrasov/multicriterial-go.git
创建时间: 2017-06-11T13:09:15Z
项目社区:https://github.com/sovrasov/multicriterial-go

开源协议:MIT License

下载


Build Status
Coverage Status
License
Code Health

multicriterial-go

An implementation of the algorithm to solve multidimensional multicriterial global optimization problems with non-convex constraints. Exact problem statement can be found here. Description of the implemented method and numerical examples are presented in paper Sovrasov V.: Parallel Multi-Objective Optimization Method for Finding Complete Set of Weakly Efficient Solutions, Proceedings of the 3rd Ural Workshop on Parallel, Distributed, and Cloud Computing for Young Scientists, Yekaterinburg, Russia, October 19th, 2017.

The implementation is compact and designed to solve low-dimensional (1-4) problems with
Lipschitzian objectives and constraints (up to 5 constraints and objectives).
The method is theoretically proved to converge to all Slater points (in case of
Lipschitzian functions and sufficient reliability parameter r).

How to clone & build

  1. git clone --recursive https://github.com/sovrasov/multicriterial-go.git
  2. cd multicriterial-go
  3. mkdir build
  4. cd build
  5. cmake ..
  6. make -j 4

Minimal usage example

  1. MCOProblem problem;
  2. //define problem with two objectives
  3. problem.AddCriterion(
  4. (const double* y) -> double {
  5. return fmin(hypot(y[0], y[1]) + .5, hypot(y[0] - 1.5, y[1] + 1.5));
  6. }
  7. );
  8. problem.AddCriterion(
  9. (const double* y) -> double {
  10. return hypot(y[0] + .5, y[1] - .5);
  11. }
  12. );
  13. //define search domain
  14. problem.SetDomain(2, {-1., -2.}, {2., 1.});
  15. //set algorithm parameters
  16. auto parameters = SolverParameters(0.01, //accuracy
  17. 0, //eps-reserves
  18. 4, //reliability
  19. 2, //number of threads
  20. 2000, //iterations limit
  21. 4); //local mix parameter
  22. MCOSolver solver;
  23. solver.SetParameters(parameters);
  24. solver.SetProblem(problem);
  25. solver.Solve();
  26. auto solution = solver.GetWeakOptimalPoints();
  27. //print points from Slater set and corresponding values of objectives
  28. for(const auto& x : points)
  29. {
  30. for(int i = 0; i < problem.GetDimension(); i++)
  31. cout << x.y[i] << ", ";
  32. for(int i = 0; i < problem.GetCriterionsNumber() - 1; i++)
  33. cout << x.z[i] << ", ";
  34. cout << x.z[problem.GetCriterionsNumber() - 1] << ";\n";
  35. }

The resulting Slater points are shown on the picture below: