Начало работы
Начало работы
Пошаговая инструкция для начала работы
-
Новая задача в виде указателя на функцию
1. Реализовать собственную тестовую задачу с известным решением по аналогии с примером в файле SimpleMain.cpp проекта GlobalizerSimpleMain, отличную от представленных тестовых задач.
1.1: В папке examples создать новый файл с исходным кодом (например, SimpleMain_15_12_2025.cpp).
1.2: Пример новой задачи:
2. Собрать пример с новой задачей используя конфигурационные файлы программной системы Globalizer:#include "Globalizer.h" double MishrasBirdFunctionals(const double* y, int fNumber){ double sin1 = sin(y[1]), cos0 = cos(y[0]); double result = 0.0; if (fNumber == 1) result = sin1 * exp(pow(1 - cos0, 2)) + cos0 * exp(pow(1 - sin1, 2)) + pow(y[0] - y[1], 2); else result = pow(y[0] + 5, 2) + pow(y[1] + 5, 2) - 25; return result; } int main(int argc, char* argv[]){ GlobalizerInitialization(argc, argv); parameters.Dimension = 2; IProblem* problem = new ProblemFromFunctionPointers( parameters.Dimension, { -10.0, -6.5 }, { 0.0, 0.0 }, MishrasBirdFunctionals, 2, true, -106.765, { -3.1302468, -1.5821422 } ); problem->Initialize(); Solver solver(problem); if (solver.Solve() != SYSTEM_OK) throw EXCEPTION("Error: solver.Solve crash!!!"); return 0; }
3. Запустить решение задачи, настроив параметры запуска:cd ../BuildGlobalizer/ CC=icc CXX=icpc cmake -DCMAKE_C_COMPILER=icc -DCMAKE_CXX_COMPILER=icpc -DGLOBALIZER_BUILD_PROBLEMS=ON -DGLOBALIZER_BUILD_GCGEN=ON -DBUILD_ALL_TASK=ON -DGLOBALIZER_MAX_DIMENSION=130 -DGLOBALIZER_MAX_Number_Of_Function=70 -DGLOBALIZER_BUILD_TESTS=ON -DGLOBALIZER_USE_MPI=ON -DGLOBALIZER_MPI=intel -DGLOBALIZER_PYTHON=ON -DGLOBALIZER_BENCHMARKS_PYTHON=ON -DGLOBALIZER_BENCHMARKS_PYTHON_PATH="../BuildGlobalizer/Globalizer_env" .. make cd ../_bin
3.1: Windows:
GlobalizerSimpleMain_15_12_2025
3.2: Linux:
./GlobalizerSimpleMain_15_12_2025
-
Новая задача в виде динамической библиотеки
1. Реализовать собственную тестовую задачу по аналогии с примером в файлах stronginc3_problem.h, stronginc3_problem.cpp проекта stronginc3, отличную от представленных тестовых задач.
1.1: В папке third_party\Problems\Problems создать новый каталог с исходным кодом задачи (например, SampleProblem_15_12_2025).
1.2: В CMakeLists.txt указать как собрать задачу с использованием конфигурационных настроек программной системы Globalizer, например:
GLOBALIZER_BENCHMARKS_define_problem(SampleProblem_15_12_2025)
1.3: Написать код заголовочного файла задачи (например, SampleProblem_15_12_2025.h). Пример заголовочного файла задачи приведен в Листинге ниже.
1.4: Написать файл исходного кода задачи (например, SampleProblem_15_12_2025.cpp). Пример файла исходного кода задачи приведен в Листинге ниже.
2. Собрать пример с новой задачей используя конфигурационные файлы программной системы Globalizer:
cd ../BuildGlobalizer/ CC=icc CXX=icpc cmake -DCMAKE_C_COMPILER=icc -DCMAKE_CXX_COMPILER=icpc -DGLOBALIZER_BUILD_PROBLEMS=ON -DGLOBALIZER_BUILD_GCGEN=ON -DBUILD_ALL_TASK=ON -DGLOBALIZER_MAX_DIMENSION=130 -DGLOBALIZER_MAX_Number_Of_Function=70 -DGLOBALIZER_BUILD_TESTS=ON -DGLOBALIZER_USE_MPI=ON -DGLOBALIZER_MPI=intel -DGLOBALIZER_PYTHON=ON -DGLOBALIZER_BENCHMARKS_PYTHON=ON -DGLOBALIZER_BENCHMARKS_PYTHON_PATH="../BuildGlobalizer/Globalizer_env" .. make cd ../_bin
3. Запустить решение задачи, настроив параметры запуска:
3.1: Windows:
GlobalizerSampleMain -lib SampleProblem_15_12_2025.dll
3.2: Linux:
./GlobalizerSampleMain -lib ../third_party/Problems/_bin/libSampleProblem_15_12_2025.so
Пример возможного файла исходного кода:
#include "SampleProblem_15_12_2025.h" #define _USE_MATH_DEFINES #include <math.h> #include <iostream> // ------------------------------------------------------------------------------------------------ SampleProblem_15_12_2025::SampleProblem_15_12_2025() {} // ------------------------------------------------------------------------------------------------ int SampleProblem_15_12_2025::GetOptimumValue(double& value) const { value = 4.5796; return IGlobalOptimizationProblem::PROBLEM_OK; } // ------------------------------------------------------------------------------------------------ int SampleProblem_15_12_2025::GetOptimumPoint(std::vector<double>& point, std::vector<std::string>& u) const { point.resize(GetDimension() - GetNumberOfDiscreteVariable()); u.resize(GetNumberOfDiscreteVariable()); point[0] = 0.2; point[1] = 0.8; point[2] = 1.908; u[0] = "1"; u[1] = "1"; u[2] = "0"; u[3] = "1"; return IGlobalOptimizationProblem::PROBLEM_OK; } // ------------------------------------------------------------------------------------------------ double SampleProblem_15_12_2025::CalculateFunctionals(const std::vector<double>& x, std::vector<std::string>& u, int fNumber) { double res = 0.0; double x1 = x[0], x2 = x[1], x3 = x[2]; double y1 = u[0].c_str()[0] - '0', y2 = u[1].c_str()[0] - '0', y3 = u[2].c_str()[0] - '0', y4 = u[3].c_str()[0] - '0'; switch (fNumber) { case 0: // constraint 1 res = y1 + y2 + y3 + x1 + x2 + x3 - 5.0; break; case 1: // constraint 2 res = y3 * y3 + x1 * x1 + x2 * x2 + x3 * x3 - 5.5; break; case 2: // constraint 3 res = y1 + x1 - 1.2; break; case 3: // constraint 4 res = y2 + x2 - 1.8; break; case 4: // constraint 5 res = y3 + x3 - 2.5; break; case 5: // constraint 6 res = y4 + x1 - 1.2; break; case 6: // constraint 7 res = y2 * y2 + x2 * x2 - 1.64; break; case 7: // constraint 8 res = y3 * y3 + x3 * x3 - 4.25; break; case 8: // constraint 9 res = y2 * y2 + x3 * x3 - 4.64; break; case 9: // criterion res = (y1 - 1.0) * (y1 - 1.0) + (y2 - 2.0) * (y2 - 2.0) + (y3 - 1.0) * (y3 - 1.0) - log(y4 + 1.0) + (x1 - 1.0) * (x1 - 1.0) + (x2 - 2.0) * (x2 - 2.0) + (x3 - 3.0) * (x3 - 3.0); break; } return res; } // ------------------------------------------------------------------------------------------------ int SampleProblem_15_12_2025::SetDimension(int dimension) { if (dimension == 3) return IGlobalOptimizationProblem::PROBLEM_OK; return IGlobalOptimizationProblem::PROBLEM_ERROR; } // ------------------------------------------------------------------------------------------------ int SampleProblem_15_12_2025::GetDimension() const { return 7; } // ------------------------------------------------------------------------------------------------ void SampleProblem_15_12_2025::GetBounds(std::vector<double>& lower, std::vector<double>& upper) { lower.resize(GetDimension() - GetNumberOfDiscreteVariable()); upper.resize(GetDimension() - GetNumberOfDiscreteVariable()); for (int i = 0; i < GetDimension() - GetNumberOfDiscreteVariable(); i++) { lower[i] = 0; upper[i] = 3; } } // ------------------------------------------------------------------------------------------------ int SampleProblem_15_12_2025::GetNumberOfFunctions() const { return GetNumberOfConstraints() + GetNumberOfCriterions(); } // ------------------------------------------------------------------------------------------------ int SampleProblem_15_12_2025::GetNumberOfConstraints() const { return 9; } // ------------------------------------------------------------------------------------------------ int SampleProblem_15_12_2025::GetNumberOfCriterions() const { return 1; } // ------------------------------------------------------------------------------------------------ int SampleProblem_15_12_2025::Initialize() { return IGlobalOptimizationProblem::PROBLEM_OK; } // ------------------------------------------------------------------------------------------------ int SampleProblem_15_12_2025::GetNumberOfDiscreteVariable() const { return 4; } // ------------------------------------------------------------------------------------------------ inline int SampleProblem_15_12_2025::GetDiscreteVariableValues(std::vector<std::vector<std::string>>& values) const { values.resize(GetNumberOfDiscreteVariable()); for (int i = 0; i < GetNumberOfDiscreteVariable(); i++) { values[i].resize(2); for (int j = 0; j < 2; j++) { values[i][j] = std::string(1, '0' + j); } } return IGlobalOptimizationProblem::PROBLEM_OK; } // ------------------------------------------------------------------------------------------------ LIB_EXPORT_API IGlobalOptimizationProblem* create() { return new SampleProblem_15_12_2025(); } // ------------------------------------------------------------------------------------------------ LIB_EXPORT_API void destroy(IGlobalOptimizationProblem* ptr) { delete ptr; } // - end of file ----------------------------------------------------------------------------------
-
Визуализация
1. Windows:
GlobalizerSampleMain -lib SampleProblem_15_12_2025.dll -N 2 -sip search_data.txt -PlotFileName search_data.png -PLOT
2. Linux:
GlobalizerSampleMain -lib ../third_party/Problems/_bin/libSampleProblem_15_12_2025.so -N 2 -sip search_data.txt -PlotFileName search_data.png -PLOT