Sərbəst iş №3
Mövzu: Xətti alqoritmlərə aid məsələlərin C++ dilində proqramların tərtibi
Fənn: Kompüter sistemlərinin aparat və proqram təminatının əsasları
Fakültə: Fizika texnologiyaları
İxtisas: Cihaz mühəndisliyi
Qrup: 2523a
Tələbə: Əlisultanov Sultan
Müəllim: Quliyeva Xavər
BAKI 2023
Optimallaşdırmanın ən qədim və ən çox istifadə edilən sahələrindən biri xətti optimallaşdırmadır (və ya xətti proqramlaşdırma ), burada məqsəd funksiyası və məhdudiyyətlər xətti ifadələr kimi yazıla bilər. Bu tip problemin sadə bir nümunəsidir.
3x + yAşağıdakı məhdudiyyətlərə uyğun olaraq maksimuma çatdırın :
0 ≤ x≤ 1
0 ≤ y≤ 2
x + y≤ 2
Bu nümunədəki məqsəd funksiyası 3x + y. Həm məqsəd funksiyası, həm də məhdudiyyətlər xətti ifadələrlə verilir və bu, xətti problemə çevirir.
Problemin həllində əsas addımlar
Hər bir dil üçün problemi qurmaq və həll etmək üçün əsas addımlar eynidir:
Lazımi kitabxanaları idxal edin,
Həll edəni elan edin,
Dəyişənləri yaradın,
Məhdudiyyətləri müəyyənləşdirin,
Məqsəd funksiyasını təyin edin,
Həlledicini çağırın və
Nəticələri göstərin.
C++ proqramı
Bu bölmə problemi quran və həll edən C++ proqramından keçir.
Qeyd: Tam C++ proqramı və onu işə salmaq üçün addımlar bölmənin sonunda göstərilir.
Budur addımlar:
Lazımi kitabxanaları idxal edin.
#include "ortools/linear_solver/linear_solver.h"
Həlledicini elan edin.
// Create the linear solver with the GLOP backend.
std::unique_ptr solver(MPSolver::CreateSolver("GLOP"));
MPSolverhər hansı xətti proqramlaşdırma və ya qarışıq tam proqramlaşdırma məsələlərini həll etmək üçün sarğıdır .
Dəyişənləri yaradın.
// Create the variables x and y.
MPVariable* const x = solver->MakeNumVar(0.0, 1, "x");
MPVariable* const y = solver->MakeNumVar(0.0, 2, "y");
LOG(INFO) << "Number of variables = " << solver->NumVariables();
Məhdudiyyətləri müəyyənləşdirin. İlk iki məhdudiyyət, 0≤ x≤ 1və 0≤ y≤ 2, artıq dəyişənlərin tərifləri ilə müəyyən edilmişdir. Aşağıdakı kod məhdudiyyəti x + y≤ müəyyən edir 2:
// Create a linear constraint, 0 <= x + y <= 2.
MPConstraint* const ct = solver->MakeRowConstraint(0.0, 2.0, "ct");
ct->SetCoefficient(x, 1);
ct->SetCoefficient(y, 1);
LOG(INFO) << "Number of constraints = " << solver->NumConstraints();
xy
Məqsəd funksiyasını təyin edin.
// Create the objective function, 3 * x + y.
MPObjective* const objective = solver->MutableObjective();
objective->SetCoefficient(x, 3);
objective->SetCoefficient(y, 1);
objective->SetMaximization();
Həlledicini çağırın və nəticələri göstərin.
solver->Solve();
LOG(INFO) << "Solution:" << std::endl;
LOG(INFO) << "Objective value = " << objective->Value();
LOG(INFO) << "x = " << x->solution_value();
LOG(INFO) << "y = " << y->solution_value();
Dostları ilə paylaş: |