Package google.research.optimization.v1.mathopt

সূচক

বেসিসপ্রোটো

একটি লিনিয়ার প্রোগ্রামের সমাধানের জন্য একটি সমন্বিত বৈশিষ্ট্য।

রৈখিক প্রোগ্রামগুলি সমাধানের জন্য সিমপ্লেক্স পদ্ধতি সর্বদা একটি "মৌলিক সম্ভাব্য সমাধান" প্রদান করে যা একটি বেসিস দ্বারা সমন্বিতভাবে বর্ণনা করা যেতে পারে। একটি ভিত্তি প্রতিটি পরিবর্তনশীল এবং রৈখিক সীমাবদ্ধতার জন্য একটি BasisStatusProto বরাদ্দ করে।

যেমন একটি স্ট্যান্ডার্ড ফর্ম LP বিবেচনা করুন: min c * x st A * x = bx >= 0 যাতে সীমাবদ্ধতার চেয়ে বেশি ভেরিয়েবল এবং সম্পূর্ণ সারি র‍্যাঙ্ক A সহ।

ধরুন n হল চলকের সংখ্যা এবং m হল রৈখিক সীমাবদ্ধতার সংখ্যা। এই সমস্যার জন্য একটি বৈধ ভিত্তি নিম্নরূপ তৈরি করা যেতে পারে: * সমস্ত সীমাবদ্ধতার ভিত্তি স্থিতি থাকবে। * m ভেরিয়েবল বাছাই করুন যাতে A এর কলামগুলি রৈখিকভাবে স্বাধীন হয় এবং বেসিক অবস্থা নির্ধারণ করে। * অবশিষ্ট n - m ভেরিয়েবলের জন্য AT_LOWER স্থিতি বরাদ্দ করুন।

এই ভিত্তির জন্য মৌলিক সমাধান হল A * x = b এর অনন্য সমাধান যাতে AT_LOWER স্ট্যাটাস সহ সমস্ত ভেরিয়েবল তাদের নিম্ন সীমাতে (সমস্ত শূন্য) স্থির থাকে। ফলস্বরূপ সমাধানটিকে একটি মৌলিক সম্ভাব্য সমাধান বলা হয় যদি এটি x >= 0 কেও সন্তুষ্ট করে।

ক্ষেত্র
constraint_status

SparseBasisStatusVector

সীমাবদ্ধতার ভিত্তিতে অবস্থা।

প্রয়োজনীয়তা: * constraint_status.ids সমান LinearConstraints.ids।

variable_status

SparseBasisStatusVector

পরিবর্তনশীল ভিত্তি অবস্থা।

প্রয়োজনীয়তা: * constraint_status.ids হল VariablesProto.ids এর সমান।

basic_dual_feasibility

SolutionStatusProto

এটি একটি উন্নত বৈশিষ্ট্য যা ম্যাথঅপ্ট দ্বারা সাবঅপ্টিমাল LP সমাধানগুলির সম্ভাব্যতা চিহ্নিত করতে ব্যবহৃত হয় (অনুকূল সমাধানগুলির সর্বদা SOLUTION_STATUS_FEASIBLE স্থিতি থাকবে)৷

একক-পার্শ্বযুক্ত LPগুলির জন্য এটি সংশ্লিষ্ট দ্বৈত সমাধানের সম্ভাব্যতার স্থিতির সমান হওয়া উচিত। দ্বি-পার্শ্বযুক্ত LP-এর ক্ষেত্রে এটি কিছু প্রান্তের ক্ষেত্রে ভিন্ন হতে পারে (যেমন প্রাইমাল সিমপ্লেক্সের সাথে অসম্পূর্ণ সমাধান)।

আপনি যদি ModelSolveParametersProto.initial_basis এর মাধ্যমে একটি প্রারম্ভিক ভিত্তি প্রদান করেন, তাহলে এই মানটিকে উপেক্ষা করা হবে। এটি শুধুমাত্র SolutionProto.basis দ্বারা প্রত্যাবর্তিত ভিত্তির জন্য প্রাসঙ্গিক।

বেসিস স্ট্যাটাস প্রোটো

LP ভিত্তিতে একটি পরিবর্তনশীল/সীমাবদ্ধতার স্থিতি।

Enums
BASIS_STATUS_UNSPECIFIED গার্ড মান কোন অবস্থা প্রতিনিধিত্ব করে.
BASIS_STATUS_FREE পরিবর্তনশীল/সীমাবদ্ধতা বিনামূল্যে (এর কোন সীমাবদ্ধ সীমা নেই)।
BASIS_STATUS_AT_LOWER_BOUND পরিবর্তনশীল/সীমাবদ্ধতা তার নিম্ন সীমানায় (যা অবশ্যই সসীম হতে হবে)।
BASIS_STATUS_AT_UPPER_BOUND পরিবর্তনশীল/সীমাবদ্ধতা তার উপরের সীমানায় (যা অবশ্যই সসীম হতে হবে)।
BASIS_STATUS_FIXED_VALUE পরিবর্তনশীল/সীমাবদ্ধতার অভিন্ন সসীম নিম্ন এবং উপরের সীমা রয়েছে।
BASIS_STATUS_BASIC পরিবর্তনশীল/সীমাবদ্ধতা মৌলিক।

DualRayProto

একটি অপ্টিমাইজেশান দ্বৈত সীমাহীন উন্নতির একটি দিক, সমস্যা; সমানভাবে, প্রাথমিক অসম্ভাব্যতার একটি শংসাপত্র।

যেমন প্রাথমিক দ্বৈত জোড়া রৈখিক প্রোগ্রাম জোড়া বিবেচনা করুন: (প্রিমাল) (দ্বৈত) min c * x max b * y st A * x >= b st y * A + r = cx >= 0 y, r >= 0। দ্বৈত রশ্মি হল জোড়া (y, r) সন্তোষজনক: b * y > 0 y * A + r = 0 y, r >= 0 লক্ষ্য করুন যে দ্বৈত সম্ভাব্য সমাধানে (y, r) এর একটি ধনাত্মক গুণিতক যোগ করলে দ্বৈত সম্ভাব্যতা বজায় থাকে এবং উদ্দেশ্য উন্নত করে (দ্বৈত প্রমাণ করা সীমাহীন)। দ্বৈত রশ্মিও প্রমাণ করে যে প্রাথমিক সমস্যাটি অসম্ভব।

নীচের DualRay বার্তায়, y হল দ্বৈত_মান এবং r হল হ্রাসকৃত_খরচ।

ক্ষেত্র
dual_values

SparseDoubleVectorProto

প্রয়োজনীয়তা: * dual_values.ids হল LinearConstraints.ids এর উপাদান। * dual_values.values ​​সব সীমিত হতে হবে।

reduced_costs

SparseDoubleVectorProto

প্রয়োজনীয়তা: * reduced_costs.ids হল VariablesProto.ids এর উপাদান। * reduced_costs.values ​​সব সীমিত হতে হবে।

DualSolutionProto

একটি অপ্টিমাইজেশান সমস্যার দ্বৈত সমাধান.

যেমন প্রাথমিক দ্বৈত জোড়া রৈখিক প্রোগ্রাম জোড়া বিবেচনা করুন: (প্রিমাল) (দ্বৈত) min c * x max b * y st A * x >= b st y * A + r = cx >= 0 y, r >= 0। দ্বৈত সমাধান হল জোড়া (y, r)। এটি সম্ভাব্য যদি এটি উপরের (দ্বৈত) থেকে সীমাবদ্ধতাগুলিকে সন্তুষ্ট করে।

নীচের বার্তায়, y হল দ্বৈত_মূল্য, r হল হ্রাসকৃত_খরচ, এবং b *y হল উদ্দেশ্যমূলক মান।

ক্ষেত্র
dual_values

SparseDoubleVectorProto

প্রয়োজনীয়তা: * dual_values.ids হল LinearConstraints.ids এর উপাদান। * dual_values.values ​​সব সীমিত হতে হবে।

reduced_costs

SparseDoubleVectorProto

প্রয়োজনীয়তা: * reduced_costs.ids হল VariablesProto.ids এর উপাদান। * reduced_costs.values ​​সব সীমিত হতে হবে।

feasibility_status

SolutionStatusProto

অন্তর্নিহিত সমাধানকারী অনুযায়ী সমাধানের সম্ভাব্যতা অবস্থা।

objective_value

double

EmphasisProto

সমাধান করার সময় একটি ঐচ্ছিক কাজের জন্য প্রচেষ্টা স্তর প্রয়োগ করা হয় (ব্যবহারের জন্য SolveParametersProto দেখুন)।

নিম্নরূপ একটি সমাধানকারী বৈশিষ্ট্য কনফিগার করার জন্য জোর দেওয়া হয়: * যদি একটি সমাধানকারী বৈশিষ্ট্যটিকে সমর্থন না করে, তবে শুধুমাত্র অনির্দিষ্ট সর্বদা বৈধ হবে, অন্য কোনো সেটিং সাধারণত একটি অবৈধ আর্গুমেন্ট ত্রুটি হবে (কিছু সমাধানকারী বন্ধও স্বীকার করতে পারে)। * যদি সমাধানকারী বৈশিষ্ট্যটিকে সমর্থন করে: - যখন অনির্দিষ্টভাবে সেট করা হয়, তখন অন্তর্নিহিত ডিফল্ট ব্যবহার করা হয়। - যখন বৈশিষ্ট্যটি বন্ধ করা যাবে না, বন্ধ একটি ত্রুটি ফিরিয়ে দেবে। - যদি বৈশিষ্ট্যটি ডিফল্টরূপে সক্ষম করা থাকে, তাহলে সমাধানকারী ডিফল্টটি সাধারণত MEDIUM-এ ম্যাপ করা হয়৷ - যদি বৈশিষ্ট্যটি সমর্থিত হয়, নিম্ন, মাঝারি, উচ্চ এবং খুব উচ্চ কখনই একটি ত্রুটি দেবে না এবং তাদের সেরা ম্যাচের উপর মানচিত্র করবে।

Enums
EMPHASIS_UNSPECIFIED
EMPHASIS_OFF
EMPHASIS_LOW
EMPHASIS_MEDIUM
EMPHASIS_HIGH
EMPHASIS_VERY_HIGH

সম্ভাব্যতা স্ট্যাটাস প্রোটো

সমাধানকারীর দ্বারা দাবি করা সমস্যার সম্ভাব্যতা অবস্থা (সমাধানকারীকে দাবির জন্য একটি শংসাপত্র ফেরত দিতে হবে না)।

Enums
FEASIBILITY_STATUS_UNSPECIFIED গার্ড মান কোন অবস্থা প্রতিনিধিত্ব করে.
FEASIBILITY_STATUS_UNDETERMINED সমাধানকারী একটি স্ট্যাটাস দাবি করে না।
FEASIBILITY_STATUS_FEASIBLE সমাধানকারী দাবি করে যে সমস্যাটি সম্ভব।
FEASIBILITY_STATUS_INFEASIBLE সমাধানকারী দাবি করে যে সমস্যাটি অসম্ভব।

IndicatorConstraintProto

ফর্মের একটি একক সূচক সীমাবদ্ধতা উপস্থাপনের জন্য ডেটা: পরিবর্তনশীল(indicator_id) = (activate_on_zero ? 0 : 1) ⇒ low_bound <= expression <= upper_bound।

যদি এই সীমাবদ্ধতার সাথে জড়িত একটি ভেরিয়েবল (হয় নির্দেশক, বা expression উপস্থিত হয়) মুছে ফেলা হয়, তাহলে এটিকে শূন্যে সেট করার মতো বিবেচনা করা হয়। বিশেষ করে, ইন্ডিকেটর ভেরিয়েবল মুছে ফেলার মানে হল যে যদি activate_on_zero মিথ্যা হয় তাহলে সূচকের সীমাবদ্ধতা শূন্য থাকে এবং এটি একটি লিনিয়ার সীমাবদ্ধতার সমতুল্য যদি activate_on_zero সত্য হয়।

ক্ষেত্র
activate_on_zero

bool

যদি সত্য হয়, তাহলে যদি নির্দেশক ভেরিয়েবলটি 0 মান নেয়, তাহলে অন্তর্নিহিত সীমাবদ্ধতা অবশ্যই ধরে রাখতে হবে। অন্যথায়, যদি সূচক ভেরিয়েবলটি মান 1 নেয়, তাহলে অন্তর্নিহিত সীমাবদ্ধতা অবশ্যই ধরে রাখতে হবে।

expression

SparseDoubleVectorProto

ধারণকৃত মডেলের ক্ষেত্রে একটি বৈধ লিনিয়ার এক্সপ্রেশন হতে হবে: * SparseDoubleVectorProto তে বর্ণিত সমস্ত শর্ত , * expression.values এর সমস্ত উপাদান অবশ্যই সসীম হতে হবে, * expression.ids হল VariablesProto.ids এর একটি উপসেট।

lower_bound

double

মান থাকতে হবে [-inf, inf); NaN হতে পারে না।

upper_bound

double

(-inf, inf]-এ মান থাকতে হবে; NaN হতে পারে না।

name

string

এই ক্ষেত্রে অভিভাবক বার্তাগুলির স্বতন্ত্রতার প্রয়োজনীয়তা থাকতে পারে; যেমন, ModelProto.indicator_constraints এবং IndicatorConstraintUpdatesProto.new_constraints দেখুন।

indicator_id

int64

একটি বাইনারি ভেরিয়েবলের সাথে সম্পর্কিত একটি আইডি বা সেট করা নেই৷ সেট না থাকলে, নির্দেশক সীমাবদ্ধতা উপেক্ষা করা হয়। সেট করা হলে, আমাদের প্রয়োজন: * VariablesProto.integers[indicator_id] = সত্য, * VariablesProto.lower_bounds[indicator_id] >= 0, * VariablesProto.upper_bounds[indicator_id] <= 1. এই শর্তগুলি MathOpt দ্বারা বৈধ নয়, কিন্তু যদি না হয় সন্তুষ্ট হলে সমাধানকারীকে সমাধান করার সময় একটি ত্রুটি ফিরিয়ে দেবে।

LPAlgorithmProto

লিনিয়ার প্রোগ্রাম সমাধানের জন্য একটি অ্যালগরিদম নির্বাচন করে।

Enums
LP_ALGORITHM_UNSPECIFIED
LP_ALGORITHM_PRIMAL_SIMPLEX (প্রাথমিক) সিমপ্লেক্স পদ্ধতি। সাধারণত আদি ও দ্বৈত সমাধান, আদি/দ্বৈত অসীম সমস্যায় আদি/দ্বৈত রশ্মি এবং একটি ভিত্তি প্রদান করতে পারে।
LP_ALGORITHM_DUAL_SIMPLEX ডুয়েল সিমপ্লেক্স পদ্ধতি। সাধারণত আদি ও দ্বৈত সমাধান, আদি/দ্বৈত অসীম সমস্যায় আদি/দ্বৈত রশ্মি এবং একটি ভিত্তি প্রদান করতে পারে।
LP_ALGORITHM_BARRIER বাধা পদ্ধতি, সাধারণভাবে একটি অভ্যন্তরীণ পয়েন্ট পদ্ধতি (IPM) নামেও পরিচিত। সাধারণত প্রাথমিক এবং দ্বৈত উভয় সমাধান দিতে পারে। কিছু বাস্তবায়ন সীমাহীন/অসম্ভাব্য সমস্যার উপর রশ্মিও তৈরি করতে পারে। একটি ভিত্তি দেওয়া হয় না যদি না অন্তর্নিহিত সমাধানকারী "ক্রসওভার" করে এবং সিমপ্লেক্স দিয়ে শেষ না করে।
LP_ALGORITHM_FIRST_ORDER একটি প্রথম-ক্রম পদ্ধতির উপর ভিত্তি করে একটি অ্যালগরিদম। এগুলি সাধারণত প্রাথমিক এবং দ্বৈত উভয় সমাধান এবং সম্ভাব্য প্রাথমিক এবং/অথবা দ্বৈত অসম্ভাব্যতার শংসাপত্র তৈরি করবে। ফার্স্ট-অর্ডার পদ্ধতিগুলি সাধারণত কম নির্ভুলতার সাথে সমাধান প্রদান করে, তাই ব্যবহারকারীদের সমাধানের মানের পরামিতি (যেমন, সহনশীলতা) সেট করার এবং সমাধানগুলিকে যাচাই করার যত্ন নেওয়া উচিত।

LimitProto

যখন একটি সমাধান() টার্মিনেশন রিজনপ্রোটো FEASIBLE বা NO_SOLUTION_FOUND এর সাথে তাড়াতাড়ি থেমে যায়, তখন নির্দিষ্ট সীমা যা আঘাত করা হয়েছিল৷

Enums
LIMIT_UNSPECIFIED একটি শূন্য মান হিসাবে ব্যবহৃত হয় যখন আমরা একটি সীমা থেকে শেষ না করি (যেমন TERMINATION_REASON_OPTIMAL)।
LIMIT_UNDETERMINED অন্তর্নিহিত সমাধানকারী কোন সীমায় পৌঁছেছে তা প্রকাশ করে না।
LIMIT_ITERATION একটি পুনরাবৃত্তিমূলক অ্যালগরিদম সর্বাধিক সংখ্যক পুনরাবৃত্তি (যেমন সিমপ্লেক্স বা বাধা পুনরাবৃত্তি) পরিচালনা করার পরে বন্ধ হয়ে যায়।
LIMIT_TIME ব্যবহারকারী-নির্দিষ্ট গণনার সময় পরে অ্যালগরিদম বন্ধ হয়ে গেছে।
LIMIT_NODE একটি শাখা-এবং-বাউন্ড অ্যালগরিদম বন্ধ হয়ে গেছে কারণ এটি শাখা-ও-বাউন্ড ট্রিতে সর্বাধিক সংখ্যক নোড অন্বেষণ করেছে।
LIMIT_SOLUTION অ্যালগরিদম বন্ধ হয়ে গেছে কারণ এটি প্রয়োজনীয় সংখ্যক সমাধান খুঁজে পেয়েছে। এটি প্রায়শই এমআইপি-তে ব্যবহৃত হয় যাতে সমাধানকারী প্রথম সম্ভাব্য সমাধানের মুখোমুখি হয়।
LIMIT_MEMORY অ্যালগরিদম বন্ধ হয়ে গেছে কারণ এটি মেমরি ফুরিয়ে গেছে।
LIMIT_CUTOFF সলভারটিকে একটি কাটঅফ দিয়ে চালানো হয়েছিল (যেমন SolveParameters.cutoff_limit সেট করা হয়েছিল) উদ্দেশ্য, যা নির্দেশ করে যে ব্যবহারকারী কাটঅফের চেয়ে খারাপ কোনো সমাধান চান না, এবং সমাধানকারী সিদ্ধান্তে পৌঁছেছে যে কাটঅফের মতো অন্তত ভালো কোনো সমাধান নেই। সাধারণত কোন সমাধান তথ্য প্রদান করা হয় না.
LIMIT_OBJECTIVE অ্যালগরিদম বন্ধ হয়ে গেছে কারণ এটি ব্যবহারকারীর দ্বারা সেট করা একটি সীমার চেয়ে একটি সমাধান বা বাউন্ড ভাল খুঁজে পেয়েছে (SolveParameters.objective_limit এবং SolveParameters.best_bound_limit দেখুন)।
LIMIT_NORM অ্যালগরিদমটি বন্ধ হয়ে গেছে কারণ একটি পুনরাবৃত্তির আদর্শটি খুব বড় হয়ে উঠেছে।
LIMIT_INTERRUPTED একটি বিঘ্নিত সংকেত বা ব্যবহারকারীর বাধা অনুরোধের কারণে অ্যালগরিদম বন্ধ হয়ে গেছে।
LIMIT_SLOW_PROGRESS অ্যালগরিদম বন্ধ হয়ে গেছে কারণ এটি সমাধানের দিকে অগ্রগতি চালিয়ে যেতে পারেনি।
LIMIT_OTHER

অ্যালগরিদমটি একটি সীমার কারণে বন্ধ হয়ে গেছে যা উপরের একটির দ্বারা আচ্ছাদিত নয়৷ উল্লেখ্য যে LIMIT_UNDETERMINED ব্যবহার করা হয় যখন কারণ নির্ণয় করা যায় না, এবং LIMIT_OTHER ব্যবহার করা হয় যখন কারণটি জানা যায় কিন্তু উপরের বিকল্পগুলির কোনোটির সাথে খাপ খায় না৷

TerminationProto.detail-এ সীমা সম্পর্কে অতিরিক্ত তথ্য থাকতে পারে।

Linear ConstraintsProto

নীচে ব্যবহৃত হিসাবে, আমরা "#লিনিয়ার সীমাবদ্ধতা" = আকার (LinearConstraintsProto.ids) সংজ্ঞায়িত করি।

ক্ষেত্র
ids[]

int64

অ-নেতিবাচক এবং কঠোরভাবে বৃদ্ধি করা আবশ্যক। সর্বোচ্চ(int64) মান ব্যবহার করা যাবে না।

lower_bounds[]

double

# রৈখিক সীমাবদ্ধতার সমান দৈর্ঘ্য থাকা উচিত, [-inf, inf) এর মান।

upper_bounds[]

double

# রৈখিক সীমাবদ্ধতার সমান দৈর্ঘ্য থাকা উচিত, (-inf, inf] এর মান।

names[]

string

যদি সেট করা না থাকে, তাহলে ধরে নেওয়া হবে সব খালি স্ট্রিং। অন্যথায়, #রৈখিক সীমাবদ্ধতার সমান দৈর্ঘ্য থাকা উচিত।

সব খালি নাম আলাদা হতে হবে।

LinearExpressionProto

একটি রৈখিক অভিব্যক্তির একটি বিক্ষিপ্ত উপস্থাপনা (ভেরিয়েবলের একটি ওজনযুক্ত সমষ্টি, এবং একটি ধ্রুবক অফসেট)।

ক্ষেত্র
ids[]

int64

ভেরিয়েবলের আইডি। সমস্ত উপাদান স্বতন্ত্র সহ (ক্রমবর্ধমান ক্রমানুসারে) বাছাই করা আবশ্যক।

coefficients[]

double

আইডির সমান দৈর্ঘ্য থাকতে হবে। মান সীমিত হতে হবে NaN নাও হতে পারে।

offset

double

সসীম হতে হবে এবং NaN নাও হতে পারে।

মডেলপ্রোটো

একটি অপ্টিমাইজেশান সমস্যা। MathOpt সমর্থন করে: - ঐচ্ছিক সসীম সীমার সাথে ক্রমাগত এবং পূর্ণসংখ্যার সিদ্ধান্তের ভেরিয়েবল। - রৈখিক এবং চতুর্মুখী উদ্দেশ্য (একক বা একাধিক উদ্দেশ্য), হয় ন্যূনতম বা সর্বাধিক। - বিভিন্ন ধরনের সীমাবদ্ধতা, যার মধ্যে রয়েছে: * রৈখিক সীমাবদ্ধতা * চতুর্মুখী সীমাবদ্ধতা * দ্বিতীয় ক্রম শঙ্কু সীমাবদ্ধতা * যৌক্তিক সীমাবদ্ধতা > SOS1 এবং SOS2 সীমাবদ্ধতা > নির্দেশক সীমাবদ্ধতা

ডিফল্টরূপে, সীমাবদ্ধতাগুলি "আইডি-টু-ডেটা" মানচিত্রে উপস্থাপন করা হয়। যাইহোক, আমরা আরও দক্ষ "স্ট্রাকট-অফ-অ্যারে" বিন্যাসে রৈখিক সীমাবদ্ধতার প্রতিনিধিত্ব করি।

ক্ষেত্র
name

string

variables

VariablesProto

objective

ObjectiveProto

মডেলের প্রাথমিক উদ্দেশ্য।

auxiliary_objectives

map<int64, ObjectiveProto >

বহু-উদ্দেশ্য মডেলে ব্যবহারের জন্য সহায়ক উদ্দেশ্য।

মানচিত্র কী আইডি অবশ্যই [0, সর্বোচ্চ(int64)) এর মধ্যে থাকতে হবে। প্রতিটি অগ্রাধিকার, এবং প্রতিটি খালি নাম অবশ্যই অনন্য এবং প্রাথমিক objective থেকে আলাদা হতে হবে।

linear_constraints

LinearConstraintsProto

linear_constraint_matrix

SparseDoubleMatrixProto

রৈখিক সীমাবদ্ধতার জন্য পরিবর্তনশীল সহগ।

যদি এই সীমাবদ্ধতার সাথে জড়িত একটি ভেরিয়েবল মুছে ফেলা হয়, তবে এটিকে শূন্যে সেট করা হিসাবে বিবেচনা করা হয়।

প্রয়োজনীয়তা: * linear_constraint_matrix.row_ids হল linear_constraints.ids এর উপাদান। * linear_constraint_matrix.column_ids হল variables.ids এর উপাদান। * ম্যাট্রিক্স এন্ট্রি নির্দিষ্ট নয় শূন্য। * linear_constraint_matrix.values ​​সব সীমিত হতে হবে।

quadratic_constraints

map<int64, QuadraticConstraintProto >

মডেলে চতুর্মুখী সীমাবদ্ধতা।

second_order_cone_constraints

map<int64, SecondOrderConeConstraintProto >

মডেলে দ্বিতীয় ক্রম শঙ্কু সীমাবদ্ধতা.

sos1_constraints

map<int64, SosConstraintProto >

SOS1 মডেলের সীমাবদ্ধতা, যা সীমাবদ্ধ করে যে সর্বাধিক একটি expression অশূন্য হতে পারে। ঐচ্ছিক weights এন্ট্রি হল একটি বাস্তবায়নের বিবরণ যা সমাধানকারীর দ্বারা (আশা করি) আরও দ্রুত একত্রিত হতে ব্যবহৃত হয়। আরও বিস্তারিতভাবে, সমাধানকারীরা এই ওজনগুলি ব্যবহার করতে পারে (বা নাও করতে পারে) ব্রাঞ্চিং সিদ্ধান্তগুলি নির্বাচন করতে যা "ভারসাম্যপূর্ণ" শিশু নোড তৈরি করে।

sos2_constraints

map<int64, SosConstraintProto >

SOS2 মডেলের সীমাবদ্ধতা, যা সীমাবদ্ধ করে যে expression সর্বাধিক দুটি এন্ট্রি অশূন্য হতে পারে এবং সেগুলি অবশ্যই তাদের ক্রমানুসারে সংলগ্ন হতে হবে। যদি কোন weights প্রদান করা না হয়, এই ক্রমটি expressions তালিকায় তাদের রৈখিক ক্রম; weights উপস্থাপন করা হলে, ক্রমবর্ধমান ক্রমে এই মানগুলির সাপেক্ষে অর্ডার নেওয়া হয়।

indicator_constraints

map<int64, IndicatorConstraintProto >

মডেলে নির্দেশক সীমাবদ্ধতা, যা প্রয়োগ করে যে, যদি একটি বাইনারি "সূচক পরিবর্তনশীল" একটিতে সেট করা হয়, তাহলে একটি "উহ্য সীমাবদ্ধতা" অবশ্যই ধরে রাখতে হবে।

মডেলসল্ভ প্যারামিটার প্রোটো

ক্ষেত্র
variable_values_filter

SparseVectorFilterProto

PrimalSolutionProto এবং PrimalRayProto (PrimalSolutionProto.variable_values, PrimalRayProto.variable_values) ভেরিয়েবল দ্বারা চাবিকৃত সমস্ত রিটার্ন করা স্পার্স কন্টেইনারে ফিল্টার প্রয়োগ করা হয়।

প্রয়োজনীয়তা: * filtered_ids হল VariablesProto.ids এর উপাদান।

dual_values_filter

SparseVectorFilterProto

ফিল্টার যা DualSolutionProto এবং DualRay (DualSolutionProto.dual_values, DualRay.dual_values) তে রৈখিক সীমাবদ্ধতা দ্বারা চাবিকৃত সমস্ত প্রত্যাবর্তিত স্পার্স পাত্রে প্রয়োগ করা হয়।

প্রয়োজনীয়তা: * filtered_ids হল LinearConstraints.ids এর উপাদান।

reduced_costs_filter

SparseVectorFilterProto

ফিল্টার যা DualSolutionProto এবং DualRay (DualSolutionProto.reduced_costs, DualRay.reduced_costs) ভেরিয়েবল দ্বারা চাবিকৃত সমস্ত রিটার্ন করা স্পার্স কন্টেনারে প্রয়োগ করা হয়।

প্রয়োজনীয়তা: * filtered_ids হল VariablesProto.ids এর উপাদান।

initial_basis

BasisProto

ওয়ার্ম স্টার্টিং সিমপ্লেক্স এলপি সলভারের জন্য ঐচ্ছিক প্রাথমিক ভিত্তি। সেট করা হলে, বর্তমান ModelSummary জন্য validators/solution_validator.hValidateBasis অনুযায়ী এটি বৈধ হবে বলে আশা করা হচ্ছে।

solution_hints[]

SolutionHintProto

ঐচ্ছিক সমাধান ইঙ্গিত. অন্তর্নিহিত সমাধানকারী শুধুমাত্র একটি ইঙ্গিত গ্রহণ করলে, প্রথম ইঙ্গিতটি ব্যবহার করা হয়।

branching_priorities

SparseInt32VectorProto

ঐচ্ছিক শাখা অগ্রাধিকার. উচ্চতর মান সহ ভেরিয়েবলগুলি প্রথমে ব্রাঞ্চ করা হবে। যে ভেরিয়েবলগুলির জন্য অগ্রাধিকার সেট করা হয় না সেগুলি সমাধানকারীর ডিফল্ট অগ্রাধিকার পায় (সাধারণত শূন্য)।

প্রয়োজনীয়তা: * branching_priorities.values ​​সীমিত হতে হবে। * branching_priorities.ids অবশ্যই VariablesProto.ids এর উপাদান হতে হবে।

ObjectiveBoundsProto

সর্বোত্তম উদ্দেশ্য মানের উপর সীমানা।

ক্ষেত্র
primal_bound

double

সমাধানকারী দাবি করে যে সর্বোত্তম মান সমান বা ভাল (নূন্যতমকরণের জন্য ছোট এবং সর্বাধিকীকরণের জন্য বড়) প্রাইমাল_বাউন্ড সমাধানকারীর প্রাথমিক সম্ভাব্যতা সহনশীলতার (নীচে সতর্কতা দেখুন): * প্রাইমাল_বাউন্ড তুচ্ছ (+সংক্ষিপ্তকরণের জন্য ইনফ এবং -ইনফ সর্বাধিকীকরণ) যখন সমাধানকারী যেমন আবদ্ধ আছে দাবি করে না. * primal_bound সর্বোত্তম প্রাথমিক সম্ভাব্য সমাধানের উদ্দেশ্যের চেয়ে সর্বোত্তম মানের কাছাকাছি হতে পারে। বিশেষ করে, primal_bound অ-তুচ্ছ হতে পারে এমনকি যখন কোনো প্রাথমিক সম্ভাব্য সমাধান ফেরত না দেওয়া হয়। সতর্কতা: সুনির্দিষ্ট দাবি হল একটি প্রাথমিক সমাধান রয়েছে যা: * সংখ্যাগতভাবে সম্ভাব্য (অর্থাৎ সমাধানকারীদের সহনশীলতা পর্যন্ত সম্ভব), এবং * এর একটি উদ্দেশ্যমূলক মান রয়েছে প্রাথমিক_বাউন্ড। এই সাংখ্যিকভাবে সম্ভাব্য সমাধানটি কিছুটা অসম্ভাব্য হতে পারে, এই ক্ষেত্রে primal_bound সর্বোত্তম মানের চেয়ে কঠোরভাবে ভাল হতে পারে। একটি প্রাথমিক সম্ভাব্যতা সহনশীলতাকে primal_bound-এ একটি সহনশীলতায় অনুবাদ করা অ-তুচ্ছ, বিশেষ করে যখন সম্ভাব্যতা সহনশীলতা তুলনামূলকভাবে বড় হয় (যেমন PDLP এর সাথে সমাধান করার সময়)।

dual_bound

double

সমাধানকারী দাবি করে যে সলভারের দ্বৈত সম্ভাব্যতা সহনশীলতার জন্য দ্বৈত_বাউন্ডের চেয়ে সর্বোত্তম মান সমান বা খারাপ (নিম্নকরণের জন্য বড় এবং সর্বাধিক করার জন্য ছোট) যেমন আবদ্ধ আছে দাবি করে না. একইভাবে primal_bound-এর মতো, এটি কিছু সমাধানকারীর ক্ষেত্রেও ঘটতে পারে এমনকি যখন অনুকূলে ফিরে আসে। MIP সমাধানকারীরা সাধারণত একটি বাউন্ড রিপোর্ট করবে যদিও এটি অসম্পূর্ণ হয়। * ক্রমাগত সমস্যার জন্য দ্বৈত_বাউন্ড সর্বোত্তম দ্বৈত সম্ভাব্য সমাধানের লক্ষ্যের চেয়ে সর্বোত্তম মানের কাছাকাছি হতে পারে। MIP-এর জন্য দ্বৈত_বাউন্ডের জন্য প্রথম অ-তুচ্ছ মানগুলির মধ্যে একটি হল প্রায়ই MIP-এর এলপি শিথিলকরণের সর্বোত্তম মান। * ডুয়াল_বাউন্ড ভাল হওয়া উচিত (নিম্নকরণের জন্য ছোট এবং সর্বাধিকীকরণের জন্য বড়) সমাধানকারী সহনশীলতা পর্যন্ত প্রাইমাল_বাউন্ড (নীচে সতর্কতা দেখুন)। সতর্কতা: * ক্রমাগত সমস্যার জন্য, সুনির্দিষ্ট দাবি হল একটি দ্বৈত সমাধান রয়েছে যা: * সংখ্যাগতভাবে সম্ভাব্য (অর্থাৎ সমাধানকারীদের সহনশীলতা পর্যন্ত সম্ভব), এবং * এর একটি উদ্দেশ্যমূলক মান dual_bound আছে। এই সাংখ্যিকভাবে সম্ভাব্য সমাধানটি কিছুটা অসম্ভাব্য হতে পারে, এই ক্ষেত্রে দ্বৈত_বাউন্ড সর্বোত্তম মান এবং প্রাথমিক_বাউন্ডের চেয়ে কঠোরভাবে খারাপ হতে পারে। প্রাথমিক ক্ষেত্রে অনুরূপ, দ্বৈত_বাউন্ডের সহনশীলতায় দ্বৈত সম্ভাব্যতা সহনশীলতা অনুবাদ করা অ-তুচ্ছ, বিশেষ করে যখন সম্ভাব্যতা সহনশীলতা তুলনামূলকভাবে বড়। যাইহোক, কিছু সমাধানকারী dual_bound-এর একটি সংশোধন করা সংস্করণ প্রদান করে যা সংখ্যাগতভাবে নিরাপদ হতে পারে। এই সংশোধন করা সংস্করণটি সমাধানকারীর নির্দিষ্ট আউটপুটের মাধ্যমে অ্যাক্সেস করা যেতে পারে (যেমন PDLP, pdlp_output.convergence_information.corrected_dual_objective)। * এমআইপি সমাধানকারীদের জন্য, ডুয়াল_বাউন্ড কিছু একটানা শিথিলকরণের জন্য একটি দ্বৈত সমাধানের সাথে যুক্ত হতে পারে (যেমন এলপি শিথিলকরণ), তবে এটি প্রায়শই সল্ভার্স এক্সিকিউশনের একটি জটিল পরিণতি এবং সাধারণত এলপি সলভারদের দ্বারা রিপোর্ট করা সীমার চেয়ে বেশি অশুদ্ধ।

উদ্দেশ্যপ্রণোদিত

ক্ষেত্র
maximize

bool

মিথ্যা হল মিনিমাইজ, সত্য হল সর্বোচ্চ করা

offset

double

সসীম হতে হবে এবং NaN নয়।

linear_coefficients

SparseDoubleVectorProto

উদ্দেশ্যপ্রণোদিত শর্তাবলী যা সিদ্ধান্তের ভেরিয়েবলে রৈখিক।

প্রয়োজনীয়তা: * linear_coefficients.ids হল VariablesProto.ids এর উপাদান। * VariablesProto নির্দিষ্ট করা হয়নি শূন্যের সাথে সঙ্গতিপূর্ণ। * linear_coefficients.values ​​সব সসীম হতে হবে। * linear_coefficients.values ​​শূন্য হতে পারে, কিন্তু এটি শুধু স্থান নষ্ট করে।

quadratic_coefficients

SparseDoubleMatrixProto

উদ্দেশ্যমূলক পদ যা সিদ্ধান্তের ভেরিয়েবলে দ্বিঘাতী।

SparseDoubleMatrixProto বার্তাগুলি ছাড়াও প্রয়োজনীয়তাগুলি: * quadratic_coefficients.row_ids এর প্রতিটি উপাদান এবং quadratic_coefficients.column_ids এর প্রতিটি উপাদান অবশ্যই VariablesProto.ids এর একটি উপাদান হতে হবে৷ * ম্যাট্রিক্স অবশ্যই উপরের ত্রিভুজাকার হতে হবে: প্রতিটি i, quadratic_coefficients.row_ids[i] <= quadratic_coefficients.column_ids[i] এর জন্য।

দ্রষ্টব্য: * স্পষ্টভাবে সংরক্ষিত নয় এমন শর্তগুলির শূন্য সহগ রয়েছে৷ * quadratic_coefficients.coefficient এর উপাদান শূন্য হতে পারে, কিন্তু এটি শুধু স্থান নষ্ট করে।

name

string

এই ক্ষেত্রে অভিভাবক বার্তাগুলির স্বতন্ত্রতার প্রয়োজনীয়তা থাকতে পারে; যেমন, ModelProto.objectives এবং AuxiliaryObjectivesUpdatesProto.new_objectives দেখুন।

priority

int64

মাল্টি-অবজেক্টিভ সমস্যার জন্য, অন্যদের তুলনায় এই উদ্দেশ্যের অগ্রাধিকার (নিম্ন বেশি গুরুত্বপূর্ণ)। এই মান নেতিবাচক হতে হবে. উপরন্তু, মডেলের প্রতিটি উদ্দেশ্য অগ্রাধিকার সমাধানের সময় আলাদা হতে হবে। এই শর্তটি প্রোটো স্তরে বৈধ নয়, তাই মডেলগুলির সাময়িকভাবে একই অগ্রাধিকারের সাথে উদ্দেশ্য থাকতে পারে।

PrimalRayProto

একটি অপ্টিমাইজেশান সমস্যা সীমাহীন উন্নতির একটি দিক; সমানভাবে, দ্বৈত অপ্টিমাইজেশান সমস্যার জন্য অযোগ্যতার একটি শংসাপত্র।

যেমন একটি সাধারণ রৈখিক প্রোগ্রাম বিবেচনা করুন: min c * x st A * x >= bx >= 0 একটি প্রাথমিক রশ্মি হল একটি x যা সন্তুষ্ট করে: c * x < 0 A * x >= 0 x >= 0 লক্ষ্য করুন যে একটি সম্ভাব্য সমাধান, প্রাথমিক রশ্মির যেকোনো ধনাত্মক মাল্টিপল প্লাস সেই দ্রবণটি এখনও সম্ভবপর, এবং একটি ভাল বস্তুনিষ্ঠ মান দেয়। একটি প্রাথমিক রশ্মি দ্বৈত অপ্টিমাইজেশান সমস্যাটিকে অসম্ভাব্য প্রমাণ করে।

নীচের PrimalRay বার্তায়, variable_values ​​হল x।

ক্ষেত্র
variable_values

SparseDoubleVectorProto

প্রয়োজনীয়তা: * variable_values.ids হল VariablesProto.ids এর উপাদান। * variable_values.values ​​সব সীমিত হতে হবে।

PrimalSolutionProto

একটি অপ্টিমাইজেশান সমস্যার সমাধান।

যেমন একটি সাধারণ রৈখিক প্রোগ্রাম বিবেচনা করুন: min c * x st A * x >= bx >= 0। একটি প্রাথমিক সমাধান হল x এর অ্যাসাইনমেন্ট মান। এটি সম্ভবপর যদি এটি উপরে থেকে A * x >= b এবং x >= 0 সন্তুষ্ট করে। নীচের PrimalSolutionProto বার্তায়, variable_values ​​হল x এবং objective_value হল c * x৷

ক্ষেত্র
variable_values

SparseDoubleVectorProto

প্রয়োজনীয়তা: * variable_values.ids হল VariablesProto.ids এর উপাদান। * variable_values.values ​​সব সীমিত হতে হবে।

objective_value

double

অন্তর্নিহিত সমাধানকারী দ্বারা গণনা করা উদ্দেশ্য মান। অসীম বা NaN হতে পারে না।

auxiliary_objective_values

map<int64, double>

অন্তর্নিহিত সমাধানকারী দ্বারা গণনা করা সহায়ক বস্তুগত মান। কীগুলি অবশ্যই বৈধ অক্জিলিয়ারী উদ্দেশ্য আইডি হতে হবে৷ মান অসীম বা NaN হতে পারে না।

feasibility_status

SolutionStatusProto

অন্তর্নিহিত সমাধানকারী অনুযায়ী সমাধানের সম্ভাব্যতা অবস্থা।

সমস্যা স্ট্যাটাস প্রোটো

প্রাথমিক সমস্যার সম্ভাব্যতা স্থিতি এবং তার দ্বৈত (বা একটি ক্রমাগত শিথিলকরণের দ্বৈত) সমাধানকারীর দাবি অনুসারে। সমাধানকারীকে দাবির জন্য একটি শংসাপত্র ফেরত দেওয়ার প্রয়োজন নেই (যেমন সমাধানকারী একটি প্রাথমিক সম্ভাব্য সমাধান না ফিরিয়ে প্রাথমিক সম্ভাব্যতা দাবি করতে পারে)। এই সম্মিলিত স্থিতিটি সমাধানকারীর দাবির সম্ভাব্যতা এবং সমাধানকৃত সমস্যার সীমাহীনতা সম্পর্কে একটি বিস্তৃত বিবরণ দেয়। এই ক্ষেত্রে,

  • প্রাথমিক এবং দ্বৈত সমস্যার জন্য একটি সম্ভাব্য অবস্থা নির্দেশ করে যে প্রাথমিকটি সম্ভাব্য এবং আবদ্ধ এবং সম্ভবত একটি সর্বোত্তম সমাধান রয়েছে (অ-রৈখিক সীমাবদ্ধতা ছাড়াই সমস্যার জন্য গ্যারান্টিযুক্ত)।
  • একটি প্রাথমিক সম্ভাব্য এবং একটি দ্বৈত অসম্ভাব্য অবস্থা নির্দেশ করে প্রাথমিক সমস্যাটি সীমাহীন (অর্থাৎ নির্বিচারে ভাল সমাধান রয়েছে)।

মনে রাখবেন যে একটি দ্বৈত অসম্ভাব্য অবস্থা নিজেই (অর্থাৎ একটি অনির্ধারিত প্রাথমিক অবস্থার সাথে) প্রাথমিক সমস্যাটিকে সীমাহীন বোঝায় না কারণ আমাদের উভয় সমস্যাই অসম্ভাব্য হতে পারে। এছাড়াও, যদিও একটি প্রাথমিক এবং দ্বৈত সম্ভাব্য অবস্থা একটি সর্বোত্তম সমাধানের অস্তিত্বকে বোঝাতে পারে, এটি গ্যারান্টি দেয় না যে সমাধানকারী আসলে এই ধরনের সর্বোত্তম সমাধান খুঁজে পেয়েছে।

ক্ষেত্র
primal_status

FeasibilityStatusProto

প্রাথমিক সমস্যার জন্য স্থিতি.

dual_status

FeasibilityStatusProto

দ্বৈত সমস্যার জন্য স্ট্যাটাস (বা ক্রমাগত শিথিলতার দ্বৈত জন্য)।

primal_or_dual_infeasible

bool

সত্য হলে, সমাধানকারী দাবি করে যে প্রাথমিক বা দ্বৈত সমস্যাটি অসম্ভাব্য, কিন্তু কোনটি (বা উভয়ই অসম্ভাব্য) তা জানে না। primal_problem_status = dual_problem_status = kUndetermined শুধুমাত্র তখনই সত্য হতে পারে। এই অতিরিক্ত তথ্যটি প্রায়ই প্রয়োজন হয় যখন প্রিপ্রসেসিং নির্ধারণ করে যে সমস্যার কোন সর্বোত্তম সমাধান নেই (তবে এটি অসম্ভাব্যতা, সীমাহীনতা বা উভয়ের কারণে তা নির্ধারণ করতে পারে না)।

Quadratic ConstraintProto

ফর্মের একটি একক দ্বিঘাত সীমাবদ্ধতা: lb <= sum{linear_terms} + sum{quadratic_terms} <= ub.

যদি এই সীমাবদ্ধতার সাথে জড়িত একটি ভেরিয়েবল মুছে ফেলা হয়, তবে এটিকে শূন্যে সেট করা হিসাবে বিবেচনা করা হয়।

ক্ষেত্র
linear_terms

SparseDoubleVectorProto

সিদ্ধান্তের ভেরিয়েবলে রৈখিক শর্তাবলী।

SparseDoubleVectorProto বার্তাগুলির প্রয়োজনীয়তাগুলি ছাড়াও আমাদের প্রয়োজন: * linear_terms.ids হল VariablesProto.ids-এর উপাদান। * linear_terms.values ​​অবশ্যই সীমিত হতে হবে এবং না-NaN।

দ্রষ্টব্য: * বাদ দেওয়া পরিবর্তনশীল আইডিগুলির একটি সংশ্লিষ্ট সহগ শূন্য রয়েছে। * linear_terms.values ​​শূন্য হতে পারে, কিন্তু এটি শুধু স্থান নষ্ট করে।

quadratic_terms

SparseDoubleMatrixProto

সিদ্ধান্তের ভেরিয়েবলের মধ্যে দ্বিঘাতমূলক পদ।

SparseDoubleMatrixProto বার্তাগুলির প্রয়োজনীয়তাগুলি ছাড়াও আমাদের প্রয়োজন যে: * quadratic_terms.row_ids-এর প্রতিটি উপাদান এবং quadratic_terms.column_ids-এর প্রতিটি উপাদান অবশ্যই VariablesProto.ids-এর একটি উপাদান হতে হবে। * ম্যাট্রিক্স অবশ্যই উপরের ত্রিভুজাকার হতে হবে: প্রতিটি i, quadratic_terms.row_ids[i] <= quadratic_terms.column_ids[i] এর জন্য।

দ্রষ্টব্য: * স্পষ্টভাবে সংরক্ষিত নয় এমন শর্তগুলির শূন্য সহগ রয়েছে৷ * quadratic_terms.coefficient এর উপাদান শূন্য হতে পারে, কিন্তু এটি শুধু স্থান নষ্ট করে।

lower_bound

double

[-inf, inf-এ মান থাকতে হবে, এবং upper_bound এর থেকে কম বা সমান হতে হবে।

upper_bound

double

(-inf, inf]-এ মান থাকতে হবে এবং lower_bound এর থেকে বড় বা সমান হতে হবে।

name

string

এই ক্ষেত্রে অভিভাবক বার্তাগুলির স্বতন্ত্রতার প্রয়োজনীয়তা থাকতে পারে; যেমন, ModelProto.quadratic_constraints এবং QuadraticConstraintUpdatesProto.new_constraints দেখুন।

SecondOrderConeConstraintProto

ফর্মের একটি একক দ্বিতীয়-ক্রম শঙ্কু সীমাবদ্ধতা:

|| arguments_to_norm ||_2 <= upper_bound ,

যেখানে upper_bound এবং arguments_to_norm এর প্রতিটি উপাদান লিনিয়ার এক্সপ্রেশন।

যদি এই সীমাবদ্ধতার সাথে জড়িত একটি ভেরিয়েবল মুছে ফেলা হয়, তবে এটিকে শূন্যে সেট করা হিসাবে বিবেচনা করা হয়।

ক্ষেত্র
upper_bound

LinearExpressionProto

arguments_to_norm[]

LinearExpressionProto

name

string

এই ক্ষেত্রে অভিভাবক বার্তাগুলির স্বতন্ত্রতার প্রয়োজনীয়তা থাকতে পারে; যেমন, ModelProto.second_order_cone_constraints এবং SecondOrderConeConstraintUpdatesProto.new_constraints দেখুন।

সমাধান হিন্টপ্রোটো

সমাধানকারীর জন্য একটি প্রস্তাবিত শুরু সমাধান।

এমআইপি সমাধানকারীরা সাধারণত শুধুমাত্র প্রাথমিক তথ্য চায় ( variable_values ), যখন এলপি সমাধানকারীরা প্রাথমিক এবং দ্বৈত উভয় তথ্য ( dual_values ) চায়।

অনেক এমআইপি সমাধানকারী এর সাথে কাজ করতে পারে: (1) আংশিক সমাধান যা সমস্ত ভেরিয়েবল নির্দিষ্ট করে না বা (2) অসম্ভাব্য সমাধান। এই ক্ষেত্রে, সমাধানকারীরা সাধারণত ইঙ্গিতটি সম্পূর্ণ/শুদ্ধ করার জন্য একটি সাব-এমআইপি সমাধান করে।

কীভাবে ইঙ্গিতটি সমাধানকারী দ্বারা ব্যবহৃত হয়, যদি আদৌ তা সমাধানকারী, সমস্যার ধরন এবং ব্যবহৃত অ্যালগরিদমের উপর অত্যন্ত নির্ভরশীল। আপনার ইঙ্গিতটির প্রভাব রয়েছে তা নিশ্চিত করার সবচেয়ে নির্ভরযোগ্য উপায় হল অন্তর্নিহিত সমাধানকারী লগগুলি ইঙ্গিত সহ এবং ছাড়াই পড়া।

সিমপ্লেক্স-ভিত্তিক LP সমাধানকারীরা সাধারণত একটি সমাধান ইঙ্গিতের জন্য প্রাথমিক ভিত্তি পছন্দ করে (অন্যথায় ইঙ্গিতটিকে একটি মৌলিক সম্ভাব্য সমাধানে রূপান্তর করতে তাদের ক্রসওভার করতে হবে)।

ক্ষেত্র
variable_values

SparseDoubleVectorProto

সমস্যার প্রাথমিক ভেরিয়েবলের মানগুলির একটি সম্ভবত আংশিক বরাদ্দ৷ এই উপ-বার্তার জন্য সমাধানকারী-স্বাধীন প্রয়োজনীয়তাগুলি হল: * variable_values.ids হল VariablesProto.ids এর উপাদান। * variable_values.values ​​সব সীমিত হতে হবে।

dual_values

SparseDoubleVectorProto

সমস্যাটির রৈখিক সীমাবদ্ধতার মানগুলির একটি (সম্ভাব্য আংশিক) বরাদ্দ৷

প্রয়োজনীয়তা: * dual_values.ids হল LinearConstraintsProto.ids এর উপাদান। * dual_values.values ​​সব সীমিত হতে হবে।

সমাধান প্রোটো

একটি সমাধানে কী অন্তর্ভুক্ত করা হয়েছে তা নির্ভর করে সমস্যা এবং সমাধানকারীর উপর। বর্তমান সাধারণ নিদর্শন হল 1. MIP সমাধানকারী শুধুমাত্র একটি প্রাথমিক সমাধান প্রদান করে। 2. সিমপ্লেক্স এলপি সলভারগুলি প্রায়শই একটি ভিত্তি এবং এই ভিত্তির সাথে সম্পর্কিত প্রাথমিক এবং দ্বৈত সমাধান প্রদান করে। 3. অন্যান্য অবিচ্ছিন্ন সমাধানকারীরা প্রায়শই একটি প্রাথমিক এবং দ্বৈত সমাধান সমাধান প্রদান করে যা একটি সলভার-নির্ভর আকারে সংযুক্ত থাকে।

প্রয়োজনীয়তা: * অন্তত একটি ক্ষেত্র সেট করা আবশ্যক; একটি সমাধান খালি হতে পারে না।

ক্ষেত্র
primal_solution

PrimalSolutionProto

dual_solution

DualSolutionProto

basis

BasisProto

সমাধান স্ট্যাটাসপ্রোটো

সমাধানকারীর দাবি অনুযায়ী প্রাথমিক বা দ্বৈত সমাধানের সম্ভাব্যতা।

Enums
SOLUTION_STATUS_UNSPECIFIED গার্ড মান কোন অবস্থা প্রতিনিধিত্ব করে.
SOLUTION_STATUS_UNDETERMINED সমাধানকারী একটি সম্ভাব্যতা স্থিতি দাবি করে না।
SOLUTION_STATUS_FEASIBLE সমাধানকারী দাবি করে যে সমাধানটি সম্ভব।
SOLUTION_STATUS_INFEASIBLE সমাধানকারী দাবি করে যে সমাধানটি অসম্ভব।

সমাধান প্যারামিটার প্রোটো

একটি একক সমাধান নিয়ন্ত্রণ করার পরামিতি।

সমস্ত সমাধানকারীর জন্য সাধারণ উভয় পরামিতি রয়েছে যেমন time_limit এবং একটি নির্দিষ্ট সমাধানকারীর জন্য পরামিতি, যেমন gscip। যদি একটি মান সাধারণ এবং সমাধানকারী নির্দিষ্ট ক্ষেত্রে সেট করা হয়, তাহলে সমাধানকারী নির্দিষ্ট সেটিং ব্যবহার করা হয়।

সাধারণ পরামিতিগুলি যেগুলি ঐচ্ছিক এবং আনসেট বা অনির্দিষ্ট মান সহ একটি enum নির্দেশ করে যে সমাধানকারী ডিফল্ট ব্যবহার করা হয়েছে।

ব্যবহৃত একটি ছাড়া অন্য সমাধানকারীদের জন্য সমাধানকারী নির্দিষ্ট পরামিতি উপেক্ষা করা হয়।

মডেলের উপর নির্ভর করে এমন প্যারামিটার (যেমন প্রতিটি ভেরিয়েবলের জন্য ব্রাঞ্চিং অগ্রাধিকার সেট করা হয়) ModelSolveParametersProto এ পাস করা হয়।

ক্ষেত্র
time_limit

Duration

একটি সমাধানকারীকে সমস্যার জন্য সর্বাধিক সময় ব্যয় করা উচিত (বা সেট না থাকলে অসীম)।

এই মান একটি কঠিন সীমা নয়, সমাধান সময় সামান্য এই মান অতিক্রম করতে পারে. এই প্যারামিটারটি সর্বদা অন্তর্নিহিত সমাধানকারীকে প্রেরণ করা হয়, সমাধানকারী ডিফল্ট ব্যবহার করা হয় না।

enable_output

bool

সমাধানকারী বাস্তবায়ন ট্রেস মুদ্রণ সক্ষম করে। এই ট্রেসগুলির অবস্থান সমাধানকারীর উপর নির্ভর করে। SCIP এবং Gurobi-এর জন্য এটি হবে আদর্শ আউটপুট স্ট্রীম। Glop এবং CP-SAT-এর জন্য এটি LOG(INFO) করবে।

মনে রাখবেন যে সমাধানকারী যদি বার্তা কলব্যাক সমর্থন করে এবং ব্যবহারকারী এটির জন্য একটি কলব্যাক নিবন্ধন করে, তাহলে এই পরামিতি মান উপেক্ষা করা হয় এবং কোন ট্রেস প্রিন্ট করা হয় না।

lp_algorithm

LPAlgorithmProto

একটি লিনিয়ার প্রোগ্রাম সমাধানের জন্য অ্যালগরিদম। LP_ALGORITHM_UNSPECIFIED হলে, সমাধানকারী ডিফল্ট অ্যালগরিদম ব্যবহার করুন।

যে সমস্যাগুলো লিনিয়ার প্রোগ্রাম নয় কিন্তু যেখানে লিনিয়ার প্রোগ্রামিং একটি সাবরুটিন, সমাধানকারীরা এই মান ব্যবহার করতে পারে। যেমন MIP সমাধানকারীরা সাধারণত এটি শুধুমাত্র রুট LP সমাধানের জন্য ব্যবহার করবে (এবং অন্যথায় ডুয়াল সিমপ্লেক্স ব্যবহার করুন)।

presolve

EmphasisProto

প্রধান অ্যালগরিদম শুরু করার আগে সমস্যাটি সরল করার প্রচেষ্টা, অথবা EMPHASIS_UNSPECIFIED হলে সমাধানকারী ডিফল্ট প্রচেষ্টা স্তর।

cuts

EmphasisProto

একটি শক্তিশালী LP শিথিলকরণ (শুধুমাত্র এমআইপি) পাওয়ার প্রচেষ্টা, অথবা EMPHASIS_UNSPECIFIED হলে সমাধানকারী ডিফল্ট প্রচেষ্টার স্তর।

দ্রষ্টব্য: কাটগুলি নিষ্ক্রিয় করা MIP_NODE-এ কাট যোগ করার সুযোগ থেকে কলব্যাকগুলিকে আটকাতে পারে, এই আচরণটি সমাধানকারী নির্দিষ্ট৷

heuristics

EmphasisProto

সম্পূর্ণ অনুসন্ধান পদ্ধতির (কেবলমাত্র এমআইপি), অথবা EMPHASIS_UNSPECIFIED হলে সমাধানকারী ডিফল্ট প্রচেষ্টার স্তরের বাইরে সম্ভাব্য সমাধান খোঁজার প্রচেষ্টা।

scaling

EmphasisProto

সংখ্যাসূচক স্থায়িত্ব উন্নত করতে সমস্যা পুনঃস্কেল করার প্রচেষ্টা, অথবা EMPHASIS_UNSPECIFIED হলে সমাধানকারী ডিফল্ট প্রচেষ্টা স্তর।

iteration_limit

int64

অন্তর্নিহিত অ্যালগরিদমের পুনরাবৃত্তির সীমাবদ্ধতা (যেমন সিমপ্লেক্স পিভট)। নির্দিষ্ট আচরণটি ব্যবহৃত সমাধানকারী এবং অ্যালগরিদমের উপর নির্ভরশীল, তবে প্রায়শই একটি নির্ধারক সমাধান সীমা দিতে পারে (আরও কনফিগারেশন প্রয়োজন হতে পারে, যেমন একটি থ্রেড)।

সাধারণত LP, QP, এবং MIP সমাধানকারীদের দ্বারা সমর্থিত, কিন্তু MIP সমাধানকারীদের জন্য node_limitও দেখুন।

node_limit

int64

গণনামূলক অনুসন্ধানে সমাধান করা উপ-সমস্যাগুলির সংখ্যার উপর সীমাবদ্ধতা (যেমন শাখা এবং আবদ্ধ)। অনেক সমাধানকারীর জন্য এটি গণনাকে সীমাবদ্ধ করতে ব্যবহার করা যেতে পারে (আরও কনফিগারেশন প্রয়োজন হতে পারে, যেমন একটি থ্রেড)।

সাধারণত MIP সমাধানকারীদের জন্য, পুনরাবৃত্তি_সীমাও দেখুন।

cutoff_limit

double

সমাধানকারীটি তাড়াতাড়ি বন্ধ হয়ে যায় যদি এটি প্রমাণ করতে পারে যে অন্তত কাটঅফের মতো কোনও প্রাথমিক সমাধান নেই।

প্রাথমিক স্টপে, সমাধানকারী সমাপ্তির কারণ NO_SOLUTION_FOUND এবং সীমা CUTOFF সহ ফেরত দেয় এবং কোনও অতিরিক্ত সমাধান তথ্য দেওয়ার প্রয়োজন হয় না। কোনো প্রাথমিক স্টপ না থাকলে রিটার্ন মানের উপর কোন প্রভাব নেই।

এটা বাঞ্ছনীয় যে আপনি একটি সহনশীলতা ব্যবহার করুন যদি আপনি সঠিকভাবে কাটঅফ ফেরত দেওয়ার সমান উদ্দেশ্য সহ সমাধান চান।

আরও বিশদ বিবরণ এবং best_bound_limit-এর সাথে তুলনার জন্য ব্যবহারকারীর নির্দেশিকা দেখুন।

objective_limit

double

সমাধানকারী শীঘ্রই থেমে যায় যত তাড়াতাড়ি এটি একটি সমাধান খুঁজে পেতে অন্তত এই ভাল, সমাপ্তি কারণ সম্ভাব্য এবং সীমিত উদ্দেশ্য সঙ্গে.

best_bound_limit

double

সমাধানকারীটি যত তাড়াতাড়ি তা প্রমাণ করে যত তাড়াতাড়ি সম্ভব বন্ধ হয়ে যায়, অন্তত এতটাই ভাল, সমাপ্তির কারণ FEASIBLE বা NO_SOLUTION_FOUND এবং সীমিত উদ্দেশ্য।

আরো বিস্তারিত জানার জন্য ব্যবহারকারীর নির্দেশিকা দেখুন এবং cutoff_limit এর সাথে তুলনা করুন।

solution_limit

int32

সমাধানকারী এই অনেকগুলি সম্ভাব্য সমাধান খুঁজে পাওয়ার পরে তাড়াতাড়ি বন্ধ হয়ে যায়, সমাপ্তির সম্ভাব্য কারণ এবং সীমিত সমাধান সহ। সেট করা থাকলে অবশ্যই শূন্যের বেশি হতে হবে। এটি প্রায়ই প্রথম সম্ভাব্য সমাধান পাওয়া সমাধানের উপর থামাতে সলভার পেতে ব্যবহার করা হয়। মনে রাখবেন যে কোনো প্রত্যাবর্তিত সমাধানের জন্য উদ্দেশ্যমূলক মূল্যের কোনো গ্যারান্টি নেই।

সমাধানকারীরা সাধারণত সমাধান সীমার চেয়ে বেশি সমাধান ফেরত দেয় না, তবে এটি MathOpt দ্বারা প্রয়োগ করা হয় না, এছাড়াও b/214041169 দেখুন৷

বর্তমানে Gurobi এবং SCIP এর জন্য এবং শুধুমাত্র 1 মান সহ CP-SAT-এর জন্য সমর্থিত।

threads

int32

যদি সেট করা হয় তবে এটি অবশ্যই >= 1 হতে হবে।

random_seed

int32

অন্তর্নিহিত সলভারে ছদ্ম-এলোমেলো নম্বর জেনারেটরের জন্য বীজ। মনে রাখবেন যে সমস্ত সমাধানকারীরা LP অ্যালগরিদমে বিভ্রান্তি, টাই-ব্রেক-আপ নিয়ম এবং হিউরিস্টিক ফিক্সিংয়ের জন্য জিনিসগুলি নির্বাচন করতে ছদ্ম-এলোমেলো সংখ্যা ব্যবহার করে। এটি পরিবর্তিত হওয়া সমাধানকারী আচরণের উপর একটি লক্ষণীয় প্রভাব ফেলতে পারে।

যদিও সমস্ত সমাধানকারীর বীজের ধারণা রয়েছে, তবে মনে রাখবেন যে বৈধ মানগুলি প্রকৃত সমাধানকারীর উপর নির্ভর করে। - গুরোবি: [0:GRB_MAXINT] (যা গুরোবি 9.0 অনুযায়ী 2x10^9)। - GSCIP: [0:2147483647] (যা MAX_INT বা kint32max বা 2^31-1)। - GLOP: [0:2147483647] (উপরের মতই) সব ক্ষেত্রে, সমাধানকারী একটি মান পাবে: MAX(0, MIN(MAX_VALID_VALUE_FOR_SOLVER, random_seed))।

absolute_gap_tolerance

double

এমআইপি সমাধানকারীদের জন্য একটি পরম সর্বোত্তম সহনশীলতা (প্রাথমিকভাবে)।

পরম GAP হল পার্থক্যের পরম মান: * সর্বোত্তম সম্ভাব্য সমাধানের বস্তুনিষ্ঠ মান, * অনুসন্ধান দ্বারা উত্পাদিত দ্বৈত আবদ্ধ। পরম GAP সর্বাধিক absolute_gap_tolerance (যখন সেট করা হয়) হলে সমাধানকারী থামতে পারে এবং TERMINATION_REASON_OPTIMAL ফেরত দিতে পারে।

সেট করা থাকলে অবশ্যই >= 0 হতে হবে।

আপেক্ষিক_ব্যবধান_সহনশীলতাও দেখুন।

relative_gap_tolerance

double

MIP সমাধানকারীদের জন্য একটি আপেক্ষিক সর্বোত্তমতা সহনশীলতা (প্রাথমিকভাবে)।

আপেক্ষিক ফাঁকটি পরম ব্যবস্থার একটি সাধারণ সংস্করণ (পরম_গ্যাপ_টোলারেন্সে সংজ্ঞায়িত), যেখানে স্বাভাবিককরণটি সমাধান-নির্ভর নির্ভর, যেমন পাওয়া সর্বোত্তম সম্ভাব্য সমাধানের উদ্দেশ্যমূলক মান দ্বারা বিভক্ত পরম গ্যাপ।

আপেক্ষিক ব্যবধানটি সর্বাধিক আপেক্ষিক_গ্যাপ_টোলারেন্সে (যখন সেট করা) হয়ে যায় এবং টার্মিনেশন_রিসন_অপটিমাল ফিরে আসে তখন সলভারটি থামতে পারে।

সেট করা হলে অবশ্যই> = 0 হতে হবে।

পরম_গ্যাপ_টোলারেন্সও দেখুন।

solution_pool_size

int32

অনুসন্ধান করার সময় solution_pool_size সমাধানগুলি বজায় রাখুন। সমাধান পুলটিতে সাধারণত দুটি ফাংশন থাকে: (1) সলভারগুলির জন্য যা একাধিক সমাধান ফিরিয়ে দিতে পারে, এটি কতগুলি সমাধান ফিরে আসবে তা সীমাবদ্ধ করে। (২) কিছু সলভার সমাধান পুল থেকে সমাধানগুলি ব্যবহার করে হিউরিস্টিক চালাতে পারে, সুতরাং এই মানটি পরিবর্তন করা অ্যালগরিদমের পথকে প্রভাবিত করতে পারে। সলভারকে সমাধান পুলটি পূরণ করতে বাধ্য করার জন্য, যেমন এন সেরা সমাধানগুলির সাথে, আরও প্রয়োজন, সলভার নির্দিষ্ট কনফিগারেশন।

সলভারসাল্টপ্রোটো

যখন প্রাথমিক/দ্বৈত সমাধান/রশ্মি জটিল হয় তখন চুক্তিটি সম্পূর্ণ বিবরণের জন্য টার্মিনেশন_রিয়ানস.এমডি দেখুন।

একটি সঠিক চুক্তি চূড়ান্ত না হওয়া পর্যন্ত, সমাপ্তির কারণে নির্ভর না করে কোনও সমাধান/রশ্মি উপস্থিত রয়েছে কিনা তা পরীক্ষা করা নিরাপদ।

ক্ষেত্র
termination

TerminationProto

সলভার থামার কারণ।

solutions[]

SolutionProto

ভবিষ্যতের সমাধানকারীদের যে সমাধানের ক্রমগুলির সাধারণ চুক্তিটি কার্যকর করা উচিত তা হ'ল অর্ডার করা: ১. প্রথম প্রাথমিক উদ্দেশ্য দ্বারা আদেশিত একটি প্রাথমিক সম্ভাব্য সমাধান সহ সমাধানগুলি। ২. দ্বৈত সম্ভাব্য সমাধান সহ সমাধানগুলি, সর্বোত্তম দ্বৈত উদ্দেশ্য দ্বারা অর্ডার করা (অজানা দ্বৈত উদ্দেশ্য সবচেয়ে খারাপ) ৩. সমস্ত অবশিষ্ট সমাধান যে কোনও ক্রমে ফিরে যেতে পারে।

primal_rays[]

PrimalRayProto

সীমাহীন প্রাথমিক উন্নতির দিকনির্দেশ, বা সমতুল্য, দ্বৈত ইনফেসিটিবিলিটি শংসাপত্র। সাধারণত টার্মিনেশনআরসিসনপ্রোটোস আনবাউন্ডেড এবং দ্বৈত_নফিজেবলের জন্য সরবরাহ করা হয়

dual_rays[]

DualRayProto

সীমাহীন দ্বৈত উন্নতির দিকনির্দেশ, বা সমতুল্য, প্রাথমিক ইনফেসিটিবিলিটি শংসাপত্র। সাধারণত টার্মিনেশনআরসিসনপ্রোটো অনিবার্য জন্য সরবরাহ করা হয়।

solve_stats

SolveStatsProto

সমাধান প্রক্রিয়া সম্পর্কিত পরিসংখ্যান, যেমন চলমান সময়, পুনরাবৃত্তি।

সলভেস্ট্যাটসপ্রোটো

ক্ষেত্র
solve_time

Duration

ম্যাথ_ওপটি দ্বারা পরিমাপ করা হিসাবে ওয়াল ঘড়ির সময় অতিবাহিত, প্রায় সলভারের ভিতরে সময় :: সমাধান ()। দ্রষ্টব্য: এর মধ্যে মডেল তৈরির কাজ অন্তর্ভুক্ত নয়।

problem_status

ProblemStatusProto

প্রাথমিক এবং দ্বৈত সমস্যার জন্য সম্ভাব্যতা স্থিতি।

simplex_iterations

int64

barrier_iterations

int64

first_order_iterations

int64

node_count

int64

সলভারটাইপপ্রোটো

ম্যাথোপ্ট দ্বারা সমর্থিত সলভারগুলি।

Enums
SOLVER_TYPE_UNSPECIFIED
SOLVER_TYPE_GSCIP

সীমাবদ্ধতা পূর্ণসংখ্যা প্রোগ্রাম (এসসিআইপি) সলভার (তৃতীয় পক্ষ) সমাধান করা।

এলপি, এমআইপি এবং ননকনভেক্স পূর্ণসংখ্যার চতুর্ভুজ সমস্যাগুলিকে সমর্থন করে। যদিও এলপিএসের জন্য কোনও দ্বৈত ডেটা ফিরে আসে না। এলপিএসের জন্য জিএলওপি পছন্দ করুন।

SOLVER_TYPE_GUROBI

গুরোবি সলভার (তৃতীয় পক্ষ)।

এলপি, এমআইপি এবং ননকনভেক্স পূর্ণসংখ্যার চতুর্ভুজ সমস্যাগুলিকে সমর্থন করে। সাধারণত দ্রুততম বিকল্প, তবে বিশেষ লাইসেন্সিং রয়েছে।

SOLVER_TYPE_GLOP

গুগলের গ্লোপ সলভার।

প্রাথমিক এবং দ্বৈত সিমপ্লেক্স পদ্ধতি সহ এলপি সমর্থন করে।

SOLVER_TYPE_CP_SAT

গুগলের সিপি-স্যাট সলভার।

সমস্ত ভেরিয়েবলগুলি পূর্ণসংখ্যা এবং সীমানাযুক্ত সমস্যাগুলি সমর্থন করে (বা অনুমানের পরে হতে পারে)। অবিচ্ছিন্ন ভেরিয়েবলগুলির সাথে সমস্যাগুলি পুনরুদ্ধার এবং বিচ্ছিন্ন করার জন্য পরীক্ষামূলক সমর্থন।

SOLVER_TYPE_PDLP

গুগলের পিডিএলপি সলভার।

এলপি এবং উত্তল তির্যক চতুর্ভুজ উদ্দেশ্য সমর্থন করে। সিমপ্লেক্সের চেয়ে প্রথম অর্ডার পদ্ধতি ব্যবহার করে। খুব বড় সমস্যা সমাধান করতে পারে।

SOLVER_TYPE_GLPK

জিএনইউ লিনিয়ার প্রোগ্রামিং কিট (জিএলপিকে) (তৃতীয় পক্ষ)।

এমআইপি এবং এলপি সমর্থন করে।

থ্রেড-সুরক্ষা: জিএলপিকে মেমরি বরাদ্দের জন্য থ্রেড-স্থানীয় স্টোরেজ ব্যবহার করে। ফলস্বরূপ সলভার দৃষ্টান্তগুলি অবশ্যই একই থ্রেডে ধ্বংস করতে হবে যেমন সেগুলি তৈরি করা হয় বা জিএলপিকে ক্র্যাশ হবে। সলভার তৈরি করার জন্য ব্যবহৃত একটির চেয়ে অন্য থ্রেড থেকে সলভার :: সলভ () কল করা ঠিক আছে বলে মনে হচ্ছে তবে এটি জিএলপিকে দ্বারা নথিভুক্ত নয় এবং এড়ানো উচিত।

প্রেসলবারের সাথে একটি এলপি সমাধান করার সময়, একটি সমাধান (এবং আনবাউন্ড রশ্মি) কেবল তখনই ফিরে আসে যদি কোনও অনুকূল সমাধান পাওয়া যায়। অন্য কিছুই ফিরে আসে না। বিশদের জন্য GLPK-5.0/DOC/glpk.pdf পৃষ্ঠা #40 দেখুন GLPK-5.0.tar.gz থেকে উপলব্ধ।

SOLVER_TYPE_OSQP

অপারেটর বিভাজন চতুর্ভুজ প্রোগ্রাম (ওএসকিউপি) সলভার (তৃতীয় পক্ষ)।

লিনিয়ার সীমাবদ্ধতা এবং লিনিয়ার বা উত্তল চতুর্ভুজ উদ্দেশ্য সহ অবিচ্ছিন্ন সমস্যা সমর্থন করে। প্রথম অর্ডার পদ্ধতি ব্যবহার করে।

SOLVER_TYPE_ECOS

এম্বেডড কনিক সলভার (ইসিও) (তৃতীয় পক্ষ)।

এলপি এবং এসওসিপি সমস্যা সমর্থন করে। অভ্যন্তরীণ পয়েন্ট পদ্ধতি (বাধা) ব্যবহার করে।

SOLVER_TYPE_SCS

বিভাজন শঙ্কু সলভার (এসসিএস) (তৃতীয় পক্ষ)।

এলপি এবং এসওসিপি সমস্যা সমর্থন করে। প্রথম অর্ডার পদ্ধতি ব্যবহার করে।

SOLVER_TYPE_HIGHS

হাইস সলভার (তৃতীয় পক্ষ)।

এলপি এবং এমআইপি সমস্যাগুলিকে সমর্থন করে (উত্তল কিউপিগুলি অপ্রচলিত)।

SOLVER_TYPE_SANTORINI

এমআইপি সলভারের ম্যাথোপ্টের রেফারেন্স বাস্তবায়ন।

ধীর/উত্পাদনের জন্য প্রস্তাবিত নয়। কোনও এলপি সলভার নয় (কোনও দ্বৈত তথ্য ফিরে আসে নি)।

সোসকনস্ট্রেইন্টপ্রোটো

একটি একক এসওএস 1 বা এসওএস 2 সীমাবদ্ধতার প্রতিনিধিত্ব করার জন্য ডেটা।

যদি এই সীমাবদ্ধতার সাথে জড়িত কোনও পরিবর্তনশীল মুছে ফেলা হয় তবে এটি এমনভাবে চিকিত্সা করা হয় যেন এটি শূন্যে সেট করা থাকে।

ক্ষেত্র
expressions[]

LinearExpressionProto

এসওএসের সীমাবদ্ধতা প্রয়োগ করার জন্য যে প্রকাশের উপর নির্ভর করে: * এসওএস 1: সর্বাধিক একটি উপাদান একটি ননজারো মান নেয়। * এসওএস 2: সর্বাধিক দুটি উপাদান ননজারো মান গ্রহণ করে এবং সেগুলি অবশ্যই পুনরাবৃত্তি ক্রমের সংলগ্ন হতে হবে।

weights[]

double

হয় খালি বা অভিব্যক্তির সমান দৈর্ঘ্যের। যদি খালি হয় তবে ডিফল্ট ওজন 1, 2, ... উপস্থিত থাকলে এন্ট্রিগুলি অবশ্যই অনন্য হতে হবে।

name

string

মূল বার্তাগুলি এই ক্ষেত্রে স্বতন্ত্রতার প্রয়োজনীয়তা থাকতে পারে; উদাহরণস্বরূপ, মডেলপ্রোটো.সোস 1_ কনস্ট্রেন্টস এবং সোসকনস্ট্রেইন্টআপডেটসপ্রোটো.নিউ_কনস্ট্রেন্টস দেখুন।

স্পারসেবাসিসস্ট্যাটাসভেক্টর

ভিত্তি স্ট্যাটাসের ভেক্টরের একটি বিরল প্রতিনিধিত্ব।

ক্ষেত্র
ids[]

int64

সমস্ত উপাদানগুলির সাথে পৃথকভাবে বাছাই করতে হবে (ক্রমবর্ধমান ক্রমের ক্ষেত্রে)।

values[]

BasisStatusProto

আইডিতে সমান দৈর্ঘ্য থাকতে হবে।

Sparsedoubleatrixproto

ডাবলসের একটি ম্যাট্রিক্সের একটি বিরল উপস্থাপনা।

ম্যাট্রিক্সটি সারি আইডি, কলাম আইডি এবং সহগের ট্রিপল হিসাবে সংরক্ষণ করা হয়। এই তিনটি ভেক্টর অবশ্যই সমান দৈর্ঘ্যের হতে হবে। আমি সবার জন্য, টিউপল (সারি_ডস [i], কলাম_আইডিএস [i]) আলাদা হওয়া উচিত। এন্ট্রিগুলি অবশ্যই সারি মেজর অর্ডারে থাকতে হবে।

ক্ষেত্র
row_ids[]

int64

column_ids[]

int64

coefficients[]

double

ন্যান না থাকতে পারে।

Sparsedoublevecterproto

ডাবলসের ভেক্টরের একটি বিরল প্রতিনিধিত্ব।

ক্ষেত্র
ids[]

int64

সমস্ত উপাদানগুলির সাথে পৃথকভাবে বাছাই করতে হবে (ক্রমবর্ধমান ক্রমের ক্ষেত্রে)।

values[]

double

আইডিতে সমান দৈর্ঘ্য থাকতে হবে। ন্যান না থাকতে পারে।

স্পারসিন্ট 32 ভেক্টরপ্রোটো

আইএনটিএসের ভেক্টরের একটি বিরল প্রতিনিধিত্ব।

ক্ষেত্র
ids[]

int64

সমস্ত উপাদানগুলির সাথে পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক পৃথক।

values[]

int32

আইডিতে সমান দৈর্ঘ্য থাকতে হবে।

স্পার্সভেক্টরফিল্টারপ্রোটো

এই বার্তাটি একটি স্পারসেক্সএক্সএক্সএক্সএক্সএকরের নির্দিষ্ট অংশগুলি জিজ্ঞাসা/সেট করতে দেয়। ডিফল্ট আচরণ কোনও কিছু ফিল্টার আউট করা হয় না। একটি সাধারণ ব্যবহার কেবলমাত্র সমাধানের অংশগুলি (কেবলমাত্র শূন্য-মান, এবং/অথবা কেবল একটি হ্যান্ড-বাছাই করা পরিবর্তনশীল মানগুলির সেট) জিজ্ঞাসা করা।

ক্ষেত্র
skip_zero_values

bool

স্পার্সবুলভেক্টরপ্রোটো "জিরো" এর জন্য false

filter_by_ids

bool

সত্য যখন, ফিল্টার_আইডিএসে তালিকাভুক্ত আইডিএসের সাথে সম্পর্কিত কেবল মানগুলি ফিরে আসে।

filtered_ids[]

int64

ফিল্টার_বি_আইডিএস ব্যবহার করার জন্য আইডিগুলির তালিকা সত্য। ফিল্টার_বি_আইডিএস মিথ্যা হলে অবশ্যই খালি থাকতে হবে। দ্রষ্টব্য: যদি এটি খালি থাকে এবং ফিল্টার_বি_আইডিএস সত্য হয় তবে আপনি বলছেন যে আপনি ফলাফলটিতে কোনও তথ্য চান না।

টার্মিনেশনপ্রোটো

কেন একটি কল সমাধান () সমাপ্ত হবে সে সম্পর্কিত সমস্ত তথ্য।

ক্ষেত্র
reason

TerminationReasonProto

limit অতিরিক্ত তথ্য যখন মূল্য হয় যখন সমাপ্তি_রিসন_ফেসিবল বা টার্মিনেশন_রিসন_নো_সোলিউশন_ফাউন্ড হয়, বিশদগুলির জন্য limit দেখুন।

limit

LimitProto

সীমা_এনএসপিসিফাইড যদি না কারণটি সমাপ্তি_রিসন_ফেসিবল বা টার্মিনেশন_রিসন_নো_সোলিউশন_ফাউন্ড হয়। সমস্ত সলভার সর্বদা সীমা নির্ধারণ করতে পারে না যা সমাপ্তির কারণ হয়ে থাকে, যখন কারণ নির্ধারণ করা যায় না তখন সীমাবদ্ধ_অনডেরমিন্ড ব্যবহার করা হয়।

detail

string

অতিরিক্ত সাধারণত সলভার নির্দিষ্ট তথ্য সমাপ্তি সম্পর্কে।

problem_status

ProblemStatusProto

প্রাথমিক এবং দ্বৈত সমস্যার জন্য সম্ভাব্যতা স্থিতি। 18 জুলাই, 2023 পর্যন্ত এই বার্তাটি অনুপস্থিত হতে পারে। যদি অনুপস্থিত থাকে তবে সমস্যা_স্ট্যাটাস সলভারসাল্টপ্রোটো.সলভ_স্ট্যাটসে পাওয়া যাবে।

objective_bounds

ObjectiveBoundsProto

অনুকূল উদ্দেশ্য মানের উপর সীমানা। 18 জুলাই, 2023 পর্যন্ত এই বার্তাটি অনুপস্থিত হতে পারে। যদি অনুপস্থিত, উদ্দেশ্য_বাউন্ডস.প্রিমাল_বাউন্ড সলভারসাল্টপ্রোটো.সলভ.স্ট্যাটস.বিষ্ট_প্রাইমাল_বাউন্ড এবং অবজেক্টিভ_বাউন্ডস.ডুয়াল_বাউন্ডে পাওয়া যাবে সলভারসাল্টপ্রোটো.সলভ.এসটিএস.বিষ্ট_ডুয়াল_বাউন্ডে পাওয়া যাবে

টার্মিনেশনআরসিসনপ্রোটো

কারণ সমাধান করার জন্য একটি কল () সমাপ্ত হয়।

Enums
TERMINATION_REASON_UNSPECIFIED
TERMINATION_REASON_OPTIMAL একটি যথাযথ অনুকূল সমাধান (সংখ্যার সহনশীলতা পর্যন্ত) পাওয়া গেছে।
TERMINATION_REASON_INFEASIBLE প্রাথমিক সমস্যাটির কোনও সম্ভাব্য সমাধান নেই।
TERMINATION_REASON_UNBOUNDED প্রাথমিক সমস্যাটি সম্ভাব্য এবং নির্বিচারে ভাল সমাধানগুলি একটি প্রাথমিক রশ্মির সাথে পাওয়া যায়।
TERMINATION_REASON_INFEASIBLE_OR_UNBOUNDED প্রাথমিক সমস্যাটি হয় অনিবার্য বা সীমাহীন। সমস্যার স্থিতি সম্পর্কে আরও বিশদ সলভ_স্ট্যাটস.প্রোব্লেম_স্ট্যাটাসে উপলব্ধ হতে পারে। নোট করুন যে গুরোবি'র সীমাহীন অবস্থা এখানে ম্যাপ করা যেতে পারে।
TERMINATION_REASON_IMPRECISE

সমস্যাটি উপরের একটি মানদণ্ডে সমাধান করা হয়েছিল (অনুকূল, অনিবার্য, সীমাহীন, বা ইনফিজলিবলডোরুনবাইটেড), তবে এক বা একাধিক সহনশীলতা পূরণ হয়নি। কিছু প্রাথমিক/দ্বৈত সমাধান/রশ্মি উপস্থিত থাকবেন, তবে হয় সেগুলি কিছুটা অকার্যকর হবে, বা (যদি সমস্যাটি প্রায় অনুকূল ছিল) তাদের সেরা সমাধানের উদ্দেশ্য এবং সর্বোত্তম উদ্দেশ্য আবদ্ধের মধ্যে ব্যবধান হতে পারে।

ব্যবহারকারীরা এখনও প্রাথমিক/দ্বৈত সমাধান/রশ্মি এবং সমাধানের পরিসংখ্যানগুলি জিজ্ঞাসা করতে পারেন তবে তারা সংখ্যাগত অনর্থকতার সাথে মোকাবিলা করার জন্য দায়বদ্ধ।

TERMINATION_REASON_FEASIBLE অপ্টিমাইজারটি এক ধরণের সীমাতে পৌঁছেছে এবং একটি প্রাথমিক সম্ভাব্য সমাধান ফিরে আসে। যে ধরণের সীমা পৌঁছেছে তার বিস্তারিত বিবরণের জন্য সলভারসাল্টপ্রোটো.লিমিট_ডিটেল দেখুন।
TERMINATION_REASON_NO_SOLUTION_FOUND অপ্টিমাইজারটি একরকম সীমাতে পৌঁছেছে এবং এটি কোনও প্রাথমিক সম্ভাব্য সমাধান খুঁজে পায়নি। যে ধরণের সীমা পৌঁছেছে তার বিস্তারিত বিবরণের জন্য সলভারসাল্টপ্রোটো.লিমিট_ডিটেল দেখুন।
TERMINATION_REASON_NUMERICAL_ERROR অ্যালগরিদমটি বন্ধ হয়ে গেছে কারণ এটি অপ্রত্যাশিত সংখ্যাসূচক ত্রুটির মুখোমুখি হয়েছিল। কোনও সমাধানের তথ্য পাওয়া যায় না।
TERMINATION_REASON_OTHER_ERROR উপরের সংজ্ঞায়িত কোনও স্ট্যাটাস দ্বারা আচ্ছাদিত ত্রুটির কারণে অ্যালগরিদম বন্ধ হয়ে গেছে। কোনও সমাধানের তথ্য পাওয়া যায় না।

ভেরিয়েবলস্প্রোটো

নীচে ব্যবহৃত হিসাবে, আমরা "#পরিবর্তনশীল" = আকার (ভেরিয়েবলপ্রোটো.আইডি) সংজ্ঞায়িত করি।

ক্ষেত্র
ids[]

int64

অ -অজ্ঞাতপরিচয় এবং কঠোরভাবে বাড়তে হবে। সর্বোচ্চ (INT64) মান ব্যবহার করা যায় না।

lower_bounds[]

double

#ভারিয়াবেলের সমান দৈর্ঘ্য হওয়া উচিত, [-ইনফ, আইএনএফ) এর মান।

upper_bounds[]

double

#পরিবর্তনশীলগুলির সমান দৈর্ঘ্য হওয়া উচিত, (-ইনফ, ইনফ] এর মান।

integers[]

bool

#ভারিয়াবেলের সমান দৈর্ঘ্য থাকা উচিত। মান অবিচ্ছিন্ন ভেরিয়েবলের জন্য মিথ্যা এবং পূর্ণসংখ্যার ভেরিয়েবলের জন্য সত্য।

names[]

string

যদি সেট না করা হয় তবে সমস্ত খালি স্ট্রিং বলে ধরে নেওয়া হয়েছে। অন্যথায়, #ভারিয়াবেলের সমান দৈর্ঘ্য হওয়া উচিত।

সমস্ত অবিরাম নাম অবশ্যই আলাদা হতে হবে।