শুরু হচ্ছে

এই উদাহরণটি দেখায় কিভাবে MathOpt ব্যবহার করে একটি সাধারণ লিনিয়ার প্রোগ্রাম (LP) এর ফলাফল তৈরি, সমাধান এবং অন্বেষণ করতে হয়। OR-Tools ইনস্টল করার বিষয়ে তথ্য ইনস্টল গাইডে পাওয়া যায়। উত্স থেকে কীভাবে তৈরি এবং চালানো যায় সে সম্পর্কে অতিরিক্ত নোটগুলি শেষ পর্যন্ত স্থগিত করা হয়েছে।

একটি MathOpt মডেল তৈরি করুন

আপনার উত্সে, আপনাকে সাধারণত শুধুমাত্র একটি একক MathOpt নির্ভরতা যোগ করতে হবে:

পাইথন

from ortools.math_opt.python import mathopt

সি++

#include <iostream>
#include <ostream>

#include "absl/log/check.h"
#include "absl/status/statusor.h"
#include "ortools/base/init_google.h"
#include "ortools/math_opt/cpp/math_opt.h"

নিম্নলিখিত রৈখিক প্রোগ্রামিং সমস্যা এই নির্দেশিকা জুড়ে ব্যবহার করা হয়, এবং এটি GLOP দিয়ে সমাধান করা হয়।

$$\begin{aligned} &\max &x + 2 \cdot y\\ &\text{subject to} &x + y &\leq 1.5 \\ &&-1 \leq x &\leq 1.5 \\ &&0 \leq y &\leq 1 \end{aligned}$$

প্রথমে, মডেল তৈরি করুন:

পাইথন

# Build the model.
model = mathopt.Model(name="getting_started_lp")
x = model.add_variable(lb=-1.0, ub=1.5, name="x")
y = model.add_variable(lb=0.0, ub=1.0, name="y")
model.add_linear_constraint(x + y <= 1.5)
model.maximize(x + 2 * y)

সি++

// Build the model.
namespace math_opt = ::operations_research::math_opt;
math_opt::Model lp_model("getting_started_lp");
const math_opt::Variable x = lp_model.AddContinuousVariable(-1.0, 1.5, "x");
const math_opt::Variable y = lp_model.AddContinuousVariable(0.0, 1.0, "y");
lp_model.AddLinearConstraint(x + y <= 1.5, "c");
lp_model.Maximize(x + 2 * y);

সমাধান এবং সমাধান পরিদর্শন

এর পরে, সমাধানের জন্য পরামিতি সেট করুন। MathOpt এর সাথে অপ্টিমাইজেশান মডেলগুলি সমাধান করা অত্যন্ত কনফিগারযোগ্য। সমাধানকারী-স্বাধীন প্যারামিটার রয়েছে (যেমন আউটপুট সক্ষম করুন), সমাধান-নির্দিষ্ট প্যারামিটার (যেমন GlopParameters.optimization_rule), প্যারামিটার যা মডেলের বৈশিষ্ট্যের উপর নির্ভর করে (যেমন শাখা অগ্রাধিকার), সমাধানকারী লগগুলির জন্য একটি কলব্যাক, এবং নিরীক্ষণের জন্য একটি কলব্যাক এবং অপ্টিমাইজেশান নিয়ন্ত্রণ করুন। নিম্নলিখিত কোডটি সমাধানকারী লগ চালু করে।

পাইথন

# Set parameters, e.g. turn on logging.
params = mathopt.SolveParameters(enable_output=True)

সি++

// Set parameters, e.g. turn on logging.
math_opt::SolveArguments args;
args.parameters.enable_output = true;

Google-এর সিমপ্লেক্স-ভিত্তিক এলপি সলভার, GLOP ব্যবহার করে সমস্যার সমাধান করতে, Solve() ফাংশনটি ব্যবহার করুন।

পাইথন

# Solve and ensure an optimal solution was found with no errors.
# (mathopt.solve may raise a RuntimeError on invalid input or internal solver
# errors.)
result = mathopt.solve(model, mathopt.SolverType.GLOP, params=params)
if result.termination.reason != mathopt.TerminationReason.OPTIMAL:
    raise RuntimeError(f"model failed to solve: {result.termination}")

সি++

// Solve and ensure an optimal solution was found with no errors.
const absl::StatusOr<math_opt::SolveResult> result =
    math_opt::Solve(lp_model, math_opt::SolverType::kGlop, args);
CHECK_OK(result.status());
CHECK_OK(result->termination.EnsureIsOptimal());

শেষ, সর্বোত্তম সমাধানের উদ্দেশ্য মান এবং সর্বোত্তম পরিবর্তনশীল মানগুলি পরিদর্শন করুন। নোট করুন যে যেহেতু সমাপ্তির কারণটি সর্বোত্তম ছিল, তাই এই মানগুলিকে অনুমান করা নিরাপদ, তবে অন্যান্য সমাপ্তির কারণে (উদাহরণস্বরূপ, অসম্ভাব্য বা সীমাহীন) এই পদ্ধতিগুলিকে কল করা CHECK fail হতে পারে (C++ এ) বা raise an exception

পাইথন

# Print some information from the result.
print("MathOpt solve succeeded")
print("Objective value:", result.objective_value())
print("x:", result.variable_values()[x])
print("y:", result.variable_values()[y])

সি++

// Print some information from the result.
std::cout << "MathOpt solve succeeded" << std::endl;
std::cout << "Objective value: " << result->objective_value() << std::endl;
std::cout << "x: " << result->variable_values().at(x) << std::endl;
std::cout << "y: " << result->variable_values().at(y) << std::endl;

Bazel এর সাথে আপনার কোড তৈরি এবং চালানোর নোট

আপনি যদি bazel ব্যবহার করে উৎস থেকে MathOpt তৈরি করছেন, তাহলে এই উদাহরণের বিল্ড টার্গেটে নিম্নলিখিত নির্ভরতা প্রয়োজন:

পাইথন

"//util/operations_research/math_opt/python:mathopt"

সি++

"//util/operations_research/math_opt/cpp:math_opt"
"//util/operations_research/math_opt/solvers:glop_solver"

আপনার কোড চালানোর জন্য, নিম্নলিখিত বেজেল কমান্ড আপনার লক্ষ্য তৈরি করে এবং চালায়।

পাইথন

bazel run path/to/you:target --with_scip=false --with_cp_sat=false
--with_glpk=false --with_glop=true -- --your_flags

সি++

bazel run path/to/you:target -- --your_flags