ইনপুট মডেল সমাধান করে এবং একবারে ফলাফল প্রদান করে। যখন আপনার কলব্যাক, ইনক্রিমেন্টালিটি এবং সমাধানের অগ্রগতি ট্র্যাক করার প্রয়োজন নেই তখন এটি ব্যবহার করুন।
HTTP অনুরোধ
POST https://optimization.googleapis.com/v1/mathopt:solveMathOptModel
URL gRPC ট্রান্সকোডিং সিনট্যাক্স ব্যবহার করে।
শরীরের অনুরোধ
অনুরোধের অংশে নিম্নলিখিত কাঠামো সহ ডেটা রয়েছে:
JSON প্রতিনিধিত্ব |
---|
{ "solverType": enum ( |
ক্ষেত্র | |
---|---|
solverType | ঐচ্ছিক। সংখ্যাগতভাবে সমস্যা সমাধানের জন্য সমাধানকারী প্রকার। মনে রাখবেন যে যদি একটি সমাধানকারী মডেলের একটি নির্দিষ্ট বৈশিষ্ট্য সমর্থন না করে, তাহলে অপ্টিমাইজেশন পদ্ধতি সফল হবে না। |
model | প্রয়োজন। সমাধান করার জন্য অপ্টিমাইজেশন সমস্যার একটি গাণিতিক উপস্থাপনা। |
parameters | ঐচ্ছিক। একটি একক সমাধান নিয়ন্ত্রণ করার পরামিতি। enableOutput প্যারামিটারটি বিশেষভাবে পরিচালনা করা হয়। সমাধানকারীদের জন্য যারা বার্তা কলব্যাক সমর্থন করে, এটিকে সত্যে সেট করলে সার্ভার একটি বার্তা কলব্যাক নিবন্ধন করবে। ফলস্বরূপ বার্তাগুলি SolveMathOptModelResponse.messages এ ফেরত দেওয়া হবে। অন্যান্য সমাধানকারীদের জন্য, enableOutput কে সত্যে সেট করার ফলে একটি ত্রুটি দেখা দেবে। |
modelParameters | ঐচ্ছিক। ইনপুট মডেলের জন্য নির্দিষ্ট একটি একক সমাধান নিয়ন্ত্রণ করার পরামিতি (মডেল স্বাধীন প্যারামিটারের জন্য SolveParametersProto দেখুন)। |
প্রতিক্রিয়া শরীর
MathOpt এ একটি unary রিমোট সমাধানের জন্য প্রতিক্রিয়া।
সফল হলে, প্রতিক্রিয়া বডিতে নিম্নলিখিত কাঠামোর সাথে ডেটা থাকে:
JSON প্রতিনিধিত্ব |
---|
{
"result": {
object ( |
ক্ষেত্র | |
---|---|
result | অনুরোধে মডেল সমাধানের আউটপুট বর্ণনা। |
messages[] | যদি SolveParametersProto.enable_output ব্যবহার করা হয়ে থাকে, তাহলে এতে সমাধানকারীদের জন্য লগ বার্তা থাকবে যা বার্তা কলব্যাক সমর্থন করে। |
SolverTypeProto
সমাধানকারী MathOpt দ্বারা সমর্থিত।
Enums | |
---|---|
SOLVER_TYPE_UNSPECIFIED | |
SOLVER_TYPE_GSCIP | সলভিং কনস্ট্রেন্ট ইন্টিজার প্রোগ্রাম (SCIP) সমাধানকারী (তৃতীয় পক্ষ)। LP, MIP, এবং nonconvex পূর্ণসংখ্যা দ্বিঘাত সমস্যা সমর্থন করে। যদিও LP-এর জন্য কোনো দ্বৈত ডেটা ফেরত দেওয়া হয় না। LP-এর জন্য GLOP পছন্দ করুন। |
SOLVER_TYPE_GUROBI | গুরোবি সমাধানকারী (তৃতীয় পক্ষ)। LP, MIP, এবং nonconvex পূর্ণসংখ্যা দ্বিঘাত সমস্যা সমর্থন করে। সাধারণত দ্রুততম বিকল্প, কিন্তু বিশেষ লাইসেন্স আছে. |
SOLVER_TYPE_GLOP | Google এর Glop সমাধানকারী। প্রাথমিক এবং দ্বৈত সিমপ্লেক্স পদ্ধতি সহ LP সমর্থন করে। |
SOLVER_TYPE_CP_SAT | Google এর CP-SAT সমাধানকারী। সমস্যাগুলিকে সমর্থন করে যেখানে সমস্ত ভেরিয়েবল পূর্ণসংখ্যা এবং আবদ্ধ (বা সমাধানের পরে বোঝানো হয়)। ক্রমাগত ভেরিয়েবলের সাথে সমস্যা পুনঃস্কেল এবং বিচ্ছিন্ন করার জন্য পরীক্ষামূলক সমর্থন। |
SOLVER_TYPE_PDLP | Google এর PDLP সমাধানকারী। LP এবং উত্তল তির্যক চতুর্মুখী উদ্দেশ্য সমর্থন করে। সিমপ্লেক্সের পরিবর্তে প্রথম অর্ডার পদ্ধতি ব্যবহার করে। অনেক বড় সমস্যা সমাধান করতে পারে। |
SOLVER_TYPE_GLPK | GNU লিনিয়ার প্রোগ্রামিং কিট (GLPK) (তৃতীয় পক্ষ)। MIP এবং LP সমর্থন করে। থ্রেড-নিরাপত্তা: GLPK মেমরি বরাদ্দের জন্য থ্রেড-স্থানীয় স্টোরেজ ব্যবহার করে। ফলস্বরূপ সমাধানকারী দৃষ্টান্তগুলিকে একই থ্রেডে ধ্বংস করতে হবে যেভাবে সেগুলি তৈরি করা হয়েছে বা GLPK ক্র্যাশ হবে। সলভার তৈরি করতে ব্যবহৃত থ্রেডের চেয়ে অন্য থ্রেড থেকে Solver::Solve() কল করা ঠিক আছে বলে মনে হচ্ছে কিন্তু এটি GLPK দ্বারা নথিভুক্ত নয় এবং এড়িয়ে যাওয়া উচিত। প্রিসলভারের সাথে একটি LP সমাধান করার সময়, একটি সমাধান (এবং অবাউন্ড রশ্মি) শুধুমাত্র তখনই ফেরত দেওয়া হয় যদি একটি সর্বোত্তম সমাধান পাওয়া যায়। অন্যথায় কিছুই ফেরত দেওয়া হয় না। বিস্তারিত জানার জন্য glpk-5.0.tar.gz থেকে উপলব্ধ glpk-5.0/doc/glpk.pdf পৃষ্ঠা #40 দেখুন। |
SOLVER_TYPE_OSQP | অপারেটর স্প্লিটিং কোয়াড্রেটিক প্রোগ্রাম (OSQP) সমাধানকারী (তৃতীয় পক্ষ)। রৈখিক সীমাবদ্ধতা এবং রৈখিক বা উত্তল দ্বিঘাত উদ্দেশ্যগুলির সাথে ক্রমাগত সমস্যাগুলিকে সমর্থন করে। একটি প্রথম অর্ডার পদ্ধতি ব্যবহার করে। |
SOLVER_TYPE_ECOS | এমবেডেড কনিক সলভার (ECOS) (তৃতীয় পক্ষ)। LP এবং SOCP সমস্যা সমর্থন করে। অভ্যন্তরীণ পয়েন্ট পদ্ধতি (বাধা) ব্যবহার করে। |
SOLVER_TYPE_SCS | স্প্লিটিং কনিক সলভার (এসসিএস) (তৃতীয় পক্ষ)। LP এবং SOCP সমস্যা সমর্থন করে। একটি প্রথম অর্ডার পদ্ধতি ব্যবহার করে। |
SOLVER_TYPE_HIGHS | হাইজিএইচএস সমাধানকারী (তৃতীয় পক্ষ)। LP এবং MIP সমস্যাগুলিকে সমর্থন করে (উত্তল QP গুলি বাস্তবায়িত নয়)। |
SOLVER_TYPE_SANTORINI | একটি MIP সমাধানকারীর MathOpt এর রেফারেন্স বাস্তবায়ন। ধীর/উৎপাদনের জন্য প্রস্তাবিত নয়। একটি LP সমাধানকারী নয় (কোন দ্বৈত তথ্য ফেরত দেওয়া হয়নি)। |
মডেলপ্রোটো
একটি অপ্টিমাইজেশান সমস্যা। MathOpt সমর্থন করে: - ঐচ্ছিক সসীম সীমার সাথে ক্রমাগত এবং পূর্ণসংখ্যার সিদ্ধান্তের ভেরিয়েবল। - রৈখিক এবং চতুর্মুখী উদ্দেশ্য (একক বা একাধিক উদ্দেশ্য), হয় ন্যূনতম বা সর্বাধিক। - বিভিন্ন ধরনের সীমাবদ্ধতা, যার মধ্যে রয়েছে: * রৈখিক সীমাবদ্ধতা * চতুর্মুখী সীমাবদ্ধতা * দ্বিতীয় ক্রম শঙ্কু সীমাবদ্ধতা * যৌক্তিক সীমাবদ্ধতা > SOS1 এবং SOS2 সীমাবদ্ধতা > নির্দেশক সীমাবদ্ধতা
ডিফল্টরূপে, সীমাবদ্ধতাগুলি "আইডি-টু-ডেটা" মানচিত্রে উপস্থাপন করা হয়। যাইহোক, আমরা আরও দক্ষ "স্ট্রাকট-অফ-অ্যারে" বিন্যাসে রৈখিক সীমাবদ্ধতার প্রতিনিধিত্ব করি।
JSON প্রতিনিধিত্ব |
---|
{ "name": string, "variables": { object ( |
ক্ষেত্র | |
---|---|
name | |
variables | |
objective | মডেলের প্রাথমিক উদ্দেশ্য। |
auxiliaryObjectives | বহু-উদ্দেশ্য মডেলে ব্যবহারের জন্য সহায়ক উদ্দেশ্য। মানচিত্র কী আইডি অবশ্যই [0, সর্বোচ্চ(int64)) এর মধ্যে থাকতে হবে। প্রতিটি অগ্রাধিকার, এবং প্রতিটি খালি নাম অবশ্যই অনন্য এবং প্রাথমিক |
linearConstraints | |
linearConstraintMatrix | রৈখিক সীমাবদ্ধতার জন্য পরিবর্তনশীল সহগ। যদি এই সীমাবদ্ধতার সাথে জড়িত একটি ভেরিয়েবল মুছে ফেলা হয়, তবে এটিকে শূন্যে সেট করা হিসাবে বিবেচনা করা হয়। প্রয়োজনীয়তা: * linearConstraintMatrix.row_ids হল linearConstraints.ids এর উপাদান। * linearConstraintMatrix.column_ids হল variables.ids এর উপাদান। * ম্যাট্রিক্স এন্ট্রি নির্দিষ্ট নয় শূন্য। * linearConstraintMatrix.values সব সীমিত হতে হবে। |
quadraticConstraints | মডেলে চতুর্মুখী সীমাবদ্ধতা। |
secondOrderConeConstraints | মডেলে দ্বিতীয় ক্রম শঙ্কু সীমাবদ্ধতা. |
sos1Constraints | SOS1 মডেলের সীমাবদ্ধতা, যা সীমাবদ্ধ করে যে সর্বাধিক একটি |
sos2Constraints | SOS2 মডেলের সীমাবদ্ধতা, যা সীমাবদ্ধ করে যে |
indicatorConstraints | মডেলে নির্দেশক সীমাবদ্ধতা, যা প্রয়োগ করে যে, যদি একটি বাইনারি "সূচক পরিবর্তনশীল" একটিতে সেট করা হয়, তাহলে একটি "উহ্য সীমাবদ্ধতা" অবশ্যই ধরে রাখতে হবে। |
ভেরিয়েবল প্রোটো
নীচে ব্যবহৃত হিসাবে, আমরা "#variables" = size(VariablesProto.ids) সংজ্ঞায়িত করি।
JSON প্রতিনিধিত্ব |
---|
{ "ids": [ string ], "lowerBounds": [ number ], "upperBounds": [ number ], "integers": [ boolean ], "names": [ string ] } |
ক্ষেত্র | |
---|---|
ids[] | অ-নেতিবাচক এবং কঠোরভাবে বৃদ্ধি করা আবশ্যক। সর্বোচ্চ(int64) মান ব্যবহার করা যাবে না। |
lowerBounds[] | # ভেরিয়েবলের সমান দৈর্ঘ্য, [-inf, inf-এ মান থাকতে হবে। |
upperBounds[] | # ভেরিয়েবলের সমান দৈর্ঘ্য থাকা উচিত, (-inf, inf] এর মান। |
integers[] | # ভেরিয়েবলের সমান দৈর্ঘ্য থাকা উচিত। ক্রমাগত ভেরিয়েবলের জন্য মান মিথ্যা এবং পূর্ণসংখ্যা ভেরিয়েবলের জন্য সত্য। |
names[] | যদি সেট করা না থাকে, তাহলে ধরে নেওয়া হবে সব খালি স্ট্রিং। অন্যথায়, # ভেরিয়েবলের সমান দৈর্ঘ্য থাকা উচিত। সব খালি নাম আলাদা হতে হবে। |
উদ্দেশ্যপ্রণোদিত
JSON প্রতিনিধিত্ব |
---|
{ "maximize": boolean, "offset": number, "linearCoefficients": { object ( |
ক্ষেত্র | |
---|---|
maximize | মিথ্যা হল মিনিমাইজ, সত্য হল সর্বোচ্চ করা |
offset | সসীম হতে হবে এবং NaN নয়। |
linearCoefficients | উদ্দেশ্যপ্রণোদিত শর্তাবলী যা সিদ্ধান্তের ভেরিয়েবলে রৈখিক। প্রয়োজনীয়তা: * linearCoefficients.ids হল VariablesProto.ids এর উপাদান। * VariablesProto নির্দিষ্ট করা হয়নি শূন্যের সাথে সঙ্গতিপূর্ণ। * linearCoefficients.values সব সীমিত হতে হবে। * linearCoefficients.values শূন্য হতে পারে, কিন্তু এটি শুধু স্থান নষ্ট করে। |
quadraticCoefficients | উদ্দেশ্যমূলক পদ যা সিদ্ধান্তের ভেরিয়েবলে দ্বিঘাতী। SparseDoubleMatrixProto বার্তাগুলি ছাড়াও প্রয়োজনীয়তাগুলি: * quadraticCoefficients.row_ids এর প্রতিটি উপাদান এবং quadraticCoefficients.column_ids এর প্রতিটি উপাদান অবশ্যই VariablesProto.ids এর একটি উপাদান হতে হবে৷ * ম্যাট্রিক্স অবশ্যই উপরের ত্রিভুজাকার হতে হবে: প্রতিটি i, quadraticCoefficients.row_ids[i] <= quadraticCoefficients.column_ids[i] এর জন্য। দ্রষ্টব্য: * স্পষ্টভাবে সংরক্ষিত নয় এমন শর্তগুলির শূন্য সহগ রয়েছে৷ * quadraticCoefficients.coefficient এর উপাদান শূন্য হতে পারে, কিন্তু এটি শুধু স্থান নষ্ট করে। |
name | এই ক্ষেত্রে অভিভাবক বার্তাগুলির স্বতন্ত্রতার প্রয়োজনীয়তা থাকতে পারে; যেমন, ModelProto.objectives এবং AuxiliaryObjectivesUpdatesProto.new_objectives দেখুন। |
priority | মাল্টি-অবজেক্টিভ সমস্যার জন্য, অন্যদের তুলনায় এই উদ্দেশ্যের অগ্রাধিকার (নিম্ন বেশি গুরুত্বপূর্ণ)। এই মান নেতিবাচক হতে হবে. উপরন্তু, মডেলের প্রতিটি উদ্দেশ্য অগ্রাধিকার সমাধানের সময় আলাদা হতে হবে। এই শর্তটি প্রোটো স্তরে বৈধ নয়, তাই মডেলগুলির সাময়িকভাবে একই অগ্রাধিকারের সাথে উদ্দেশ্য থাকতে পারে। |
SparseDoubleVectorProto
দ্বিগুণ ভেক্টরের একটি বিক্ষিপ্ত উপস্থাপনা।
JSON প্রতিনিধিত্ব |
---|
{ "ids": [ string ], "values": [ number ] } |
ক্ষেত্র | |
---|---|
ids[] | সমস্ত উপাদান স্বতন্ত্র সহ (ক্রমবর্ধমান ক্রমানুসারে) বাছাই করা আবশ্যক। |
values[] | আইডির সমান দৈর্ঘ্য থাকতে হবে। NaN নাও থাকতে পারে। |
SparseDoubleMatrixProto
ডাবলের একটি ম্যাট্রিক্সের একটি বিক্ষিপ্ত উপস্থাপনা।
ম্যাট্রিক্সটি সারি আইডি, কলাম আইডি এবং সহগ এর তিনগুণ হিসাবে সংরক্ষণ করা হয়। এই তিনটি ভেক্টর অবশ্যই সমান দৈর্ঘ্যের হতে হবে। সকল i-এর জন্য, tuple (rowIds[i], columnIds[i]) আলাদা হওয়া উচিত। এন্ট্রি প্রধান ক্রম সারি হতে হবে.
JSON প্রতিনিধিত্ব |
---|
{ "rowIds": [ string ], "columnIds": [ string ], "coefficients": [ number ] } |
ক্ষেত্র | |
---|---|
rowIds[] | |
columnIds[] | |
coefficients[] | NaN নাও থাকতে পারে। |
Linear ConstraintsProto
নীচে ব্যবহৃত হিসাবে, আমরা "#লিনিয়ার সীমাবদ্ধতা" = আকার (LinearConstraintsProto.ids) সংজ্ঞায়িত করি।
JSON প্রতিনিধিত্ব |
---|
{ "ids": [ string ], "lowerBounds": [ number ], "upperBounds": [ number ], "names": [ string ] } |
ক্ষেত্র | |
---|---|
ids[] | অ-নেতিবাচক এবং কঠোরভাবে বৃদ্ধি করা আবশ্যক। সর্বোচ্চ(int64) মান ব্যবহার করা যাবে না। |
lowerBounds[] | # রৈখিক সীমাবদ্ধতার সমান দৈর্ঘ্য থাকা উচিত, [-inf, inf) এর মান। |
upperBounds[] | # রৈখিক সীমাবদ্ধতার সমান দৈর্ঘ্য থাকা উচিত, (-inf, inf] এর মান। |
names[] | যদি সেট করা না থাকে, তাহলে ধরে নেওয়া হবে সব খালি স্ট্রিং। অন্যথায়, #রৈখিক সীমাবদ্ধতার সমান দৈর্ঘ্য থাকা উচিত। সব খালি নাম আলাদা হতে হবে। |
Quadratic ConstraintProto
ফর্মের একটি একক দ্বিঘাত সীমাবদ্ধতা: lb <= sum{linearTerms} + sum{quadraticTerms} <= ub.
যদি এই সীমাবদ্ধতার সাথে জড়িত একটি ভেরিয়েবল মুছে ফেলা হয়, তবে এটিকে শূন্যে সেট করা হিসাবে বিবেচনা করা হয়।
JSON প্রতিনিধিত্ব |
---|
{ "linearTerms": { object ( |
ক্ষেত্র | |
---|---|
linearTerms | সিদ্ধান্তের ভেরিয়েবলে রৈখিক শর্তাবলী। SparseDoubleVectorProto বার্তাগুলির প্রয়োজনীয়তাগুলি ছাড়াও আমাদের প্রয়োজন: * linearTerms.ids হল VariablesProto.ids-এর উপাদান। * linearTerms.values অবশ্যই সীমিত হতে হবে এবং না-NaN। দ্রষ্টব্য: * বাদ দেওয়া পরিবর্তনশীল আইডিগুলির একটি সংশ্লিষ্ট সহগ শূন্য রয়েছে। * linearTerms.values শূন্য হতে পারে, কিন্তু এটি শুধু স্থান নষ্ট করে। |
quadraticTerms | সিদ্ধান্তের ভেরিয়েবলের মধ্যে দ্বিঘাতমূলক পদ। SparseDoubleMatrixProto বার্তাগুলির প্রয়োজনীয়তাগুলি ছাড়াও আমাদের প্রয়োজন যে: * quadraticTerms.row_ids-এর প্রতিটি উপাদান এবং quadraticTerms.column_ids-এর প্রতিটি উপাদান অবশ্যই VariablesProto.ids-এর একটি উপাদান হতে হবে। * ম্যাট্রিক্স অবশ্যই উপরের ত্রিভুজাকার হতে হবে: প্রতিটি i, quadraticTerms.row_ids[i] <= quadraticTerms.column_ids[i] এর জন্য। দ্রষ্টব্য: * স্পষ্টভাবে সংরক্ষিত নয় এমন শর্তগুলির শূন্য সহগ রয়েছে৷ * quadraticTerms.coefficient এর উপাদান শূন্য হতে পারে, কিন্তু এটি শুধু স্থান নষ্ট করে। |
lowerBound | [-inf, inf-এ মান থাকতে হবে, এবং |
upperBound | (-inf, inf]-এ মান থাকতে হবে এবং |
name | এই ক্ষেত্রে অভিভাবক বার্তাগুলির স্বতন্ত্রতার প্রয়োজনীয়তা থাকতে পারে; যেমন, ModelProto.quadratic_constraints এবং QuadraticConstraintUpdatesProto.new_constraints দেখুন। |
SecondOrderConeConstraintProto
ফর্মের একটি একক দ্বিতীয়-ক্রম শঙ্কু সীমাবদ্ধতা:
|| argumentsToNorm
||_2 <= upperBound
,
যেখানে upperBound
এবং argumentsToNorm
এর প্রতিটি উপাদান লিনিয়ার এক্সপ্রেশন।
যদি এই সীমাবদ্ধতার সাথে জড়িত একটি ভেরিয়েবল মুছে ফেলা হয়, তবে এটিকে শূন্যে সেট করা হিসাবে বিবেচনা করা হয়।
JSON প্রতিনিধিত্ব |
---|
{ "upperBound": { object ( |
ক্ষেত্র | |
---|---|
upperBound | |
argumentsToNorm[] | |
name | এই ক্ষেত্রে অভিভাবক বার্তাগুলির স্বতন্ত্রতার প্রয়োজনীয়তা থাকতে পারে; যেমন, |
LinearExpressionProto
একটি রৈখিক অভিব্যক্তির একটি বিক্ষিপ্ত উপস্থাপনা (ভেরিয়েবলের একটি ওজনযুক্ত সমষ্টি, এবং একটি ধ্রুবক অফসেট)।
JSON প্রতিনিধিত্ব |
---|
{ "ids": [ string ], "coefficients": [ number ], "offset": number } |
ক্ষেত্র | |
---|---|
ids[] | ভেরিয়েবলের আইডি। সমস্ত উপাদান স্বতন্ত্র সহ (ক্রমবর্ধমান ক্রমানুসারে) বাছাই করা আবশ্যক। |
coefficients[] | আইডির সমান দৈর্ঘ্য থাকতে হবে। মান সীমিত হতে হবে NaN নাও হতে পারে। |
offset | সসীম হতে হবে এবং NaN নাও হতে পারে। |
SosConstraintProto
একটি একক SOS1 বা SOS2 সীমাবদ্ধতা উপস্থাপনের জন্য ডেটা।
যদি এই সীমাবদ্ধতার সাথে জড়িত একটি ভেরিয়েবল মুছে ফেলা হয়, তবে এটিকে শূন্যে সেট করা হিসাবে বিবেচনা করা হয়।
JSON প্রতিনিধিত্ব |
---|
{
"expressions": [
{
object ( |
ক্ষেত্র | |
---|---|
expressions[] | SOS সীমাবদ্ধতা প্রয়োগ করার জন্য অভিব্যক্তি: * SOS1: সর্বাধিক একটি উপাদান একটি অশূন্য মান নেয়। * SOS2: সর্বাধিক দুটি উপাদান অশূন্য মান নেয়, এবং সেগুলি অবশ্যই পুনরাবৃত্তি ক্রমানুসারে সংলগ্ন হতে হবে। |
weights[] | হয় খালি বা অভিব্যক্তির সমান দৈর্ঘ্যের। যদি খালি থাকে, ডিফল্ট ওজন 1, 2, ... উপস্থিত থাকলে, এন্ট্রিগুলি অবশ্যই অনন্য হতে হবে। |
name | এই ক্ষেত্রে অভিভাবক বার্তাগুলির স্বতন্ত্রতার প্রয়োজনীয়তা থাকতে পারে; যেমন, ModelProto.sos1_constraints এবং SosConstraintUpdatesProto.new_constraints দেখুন। |
IndicatorConstraintProto
ফর্মের একটি একক সূচক সীমাবদ্ধতা উপস্থাপনের জন্য ডেটা: পরিবর্তনশীল(সূচক আইডি) = (অ্যাক্টিভেটঅনজিরো? 0 : 1) ⇒ নিম্নবাউন্ড <= অভিব্যক্তি <= উপরেরবাউন্ড।
যদি এই সীমাবদ্ধতার সাথে জড়িত একটি ভেরিয়েবল (হয় নির্দেশক, বা expression
উপস্থিত হয়) মুছে ফেলা হয়, তাহলে এটিকে শূন্যে সেট করার মতো বিবেচনা করা হয়। বিশেষ করে, ইন্ডিকেটর ভেরিয়েবল মুছে ফেলার মানে হল যে যদি activateOnZero
মিথ্যা হয় তাহলে ইন্ডিকেটর সীমাবদ্ধতা শূন্য থাকে এবং activateOnZero
সত্য হলে এটি একটি রৈখিক সীমাবদ্ধতার সমতুল্য।
JSON প্রতিনিধিত্ব |
---|
{
"activateOnZero": boolean,
"expression": {
object ( |
ক্ষেত্র | |
---|---|
activateOnZero | যদি সত্য হয়, তাহলে যদি নির্দেশক ভেরিয়েবলটি 0 মান নেয়, তাহলে অন্তর্নিহিত সীমাবদ্ধতা অবশ্যই ধরে রাখতে হবে। অন্যথায়, যদি সূচক ভেরিয়েবলটি মান 1 নেয়, তাহলে অন্তর্নিহিত সীমাবদ্ধতা অবশ্যই ধরে রাখতে হবে। |
expression | ধারণকৃত মডেলের ক্ষেত্রে একটি বৈধ লিনিয়ার এক্সপ্রেশন হতে হবে: * |
lowerBound | মান থাকতে হবে [-inf, inf); NaN হতে পারে না। |
upperBound | (-inf, inf]-এ মান থাকতে হবে; NaN হতে পারে না। |
name | এই ক্ষেত্রে অভিভাবক বার্তাগুলির স্বতন্ত্রতার প্রয়োজনীয়তা থাকতে পারে; যেমন, |
indicatorId | একটি বাইনারি ভেরিয়েবলের সাথে সম্পর্কিত একটি আইডি বা সেট করা নেই৷ সেট না থাকলে, নির্দেশক সীমাবদ্ধতা উপেক্ষা করা হয়। যদি সেট করা হয়, তাহলে আমাদের প্রয়োজন: * VariablesProto.integers[indicatorId] = সত্য, * VariablesProto.lower_bounds[indicatorId] >= 0, * VariablesProto.upper_bounds[indicatorId] <= 1. এই শর্তগুলি MathOpt দ্বারা বৈধ নয়, কিন্তু যদি না হয় সন্তুষ্ট হলে সমাধানকারীকে সমাধান করার সময় একটি ত্রুটি ফিরিয়ে দেবে। |
সমাধান প্যারামিটার প্রোটো
একটি একক সমাধান নিয়ন্ত্রণ করার পরামিতি।
সমস্ত সমাধানকারীর জন্য সাধারণ উভয় প্যারামিটার রয়েছে যেমন সময়সীমা, এবং একটি নির্দিষ্ট সমাধানকারীর জন্য পরামিতি, যেমন gscip। যদি একটি মান সাধারণ এবং সমাধানকারী নির্দিষ্ট ক্ষেত্রে সেট করা হয়, তাহলে সমাধানকারী নির্দিষ্ট সেটিং ব্যবহার করা হয়।
সাধারণ পরামিতিগুলি যেগুলি ঐচ্ছিক এবং আনসেট বা অনির্দিষ্ট মান সহ একটি enum নির্দেশ করে যে সমাধানকারী ডিফল্ট ব্যবহার করা হয়েছে।
ব্যবহৃত একটি ছাড়া অন্য সমাধানকারীদের জন্য সমাধানকারী নির্দিষ্ট পরামিতি উপেক্ষা করা হয়।
মডেলের উপর নির্ভর করে এমন প্যারামিটার (যেমন প্রতিটি ভেরিয়েবলের জন্য ব্রাঞ্চিং অগ্রাধিকার সেট করা হয়) ModelSolveParametersProto এ পাস করা হয়।
JSON প্রতিনিধিত্ব |
---|
{ "timeLimit": string, "enableOutput": boolean, "lpAlgorithm": enum ( |
ক্ষেত্র | |
---|---|
timeLimit | একটি সমাধানকারীকে সমস্যার জন্য সর্বাধিক সময় ব্যয় করা উচিত (বা সেট না থাকলে অসীম)। এই মান একটি কঠিন সীমা নয়, সমাধান সময় সামান্য এই মান অতিক্রম করতে পারে. এই প্যারামিটারটি সর্বদা অন্তর্নিহিত সমাধানকারীকে প্রেরণ করা হয়, সমাধানকারী ডিফল্ট ব্যবহার করা হয় না। নয়টি পর্যন্ত ভগ্নাংশের সংখ্যা সহ সেকেন্ডে একটি সময়কাল, ' |
enableOutput | সমাধানকারী বাস্তবায়ন ট্রেস মুদ্রণ সক্ষম করে। এই ট্রেসগুলির অবস্থান সমাধানকারীর উপর নির্ভর করে। SCIP এবং Gurobi-এর জন্য এটি হবে আদর্শ আউটপুট স্ট্রীম। Glop এবং CP-SAT-এর জন্য এটি LOG(INFO) করবে। মনে রাখবেন যে সমাধানকারী যদি বার্তা কলব্যাক সমর্থন করে এবং ব্যবহারকারী এটির জন্য একটি কলব্যাক নিবন্ধন করে, তাহলে এই পরামিতি মান উপেক্ষা করা হয় এবং কোন ট্রেস প্রিন্ট করা হয় না। |
lpAlgorithm | একটি লিনিয়ার প্রোগ্রাম সমাধানের জন্য অ্যালগরিদম। LP_ALGORITHM_UNSPECIFIED হলে, সমাধানকারী ডিফল্ট অ্যালগরিদম ব্যবহার করুন। যে সমস্যাগুলো লিনিয়ার প্রোগ্রাম নয় কিন্তু যেখানে লিনিয়ার প্রোগ্রামিং একটি সাবরুটিন, সমাধানকারীরা এই মান ব্যবহার করতে পারে। যেমন MIP সমাধানকারীরা সাধারণত এটি শুধুমাত্র রুট LP সমাধানের জন্য ব্যবহার করবে (এবং অন্যথায় ডুয়াল সিমপ্লেক্স ব্যবহার করুন)। |
presolve | প্রধান অ্যালগরিদম শুরু করার আগে সমস্যাটি সরল করার প্রচেষ্টা, অথবা EMPHASIS_UNSPECIFIED হলে সমাধানকারী ডিফল্ট প্রচেষ্টা স্তর। |
cuts | একটি শক্তিশালী LP শিথিলকরণ (শুধুমাত্র এমআইপি) পাওয়ার প্রচেষ্টা, অথবা EMPHASIS_UNSPECIFIED হলে সমাধানকারী ডিফল্ট প্রচেষ্টার স্তর। দ্রষ্টব্য: কাটগুলি নিষ্ক্রিয় করা MIP_NODE-এ কাট যোগ করার সুযোগ থেকে কলব্যাকগুলিকে আটকাতে পারে, এই আচরণটি সমাধানকারী নির্দিষ্ট৷ |
heuristics | সম্পূর্ণ অনুসন্ধান পদ্ধতির (কেবলমাত্র এমআইপি), অথবা EMPHASIS_UNSPECIFIED হলে সমাধানকারী ডিফল্ট প্রচেষ্টার স্তরের বাইরে সম্ভাব্য সমাধান খোঁজার প্রচেষ্টা। |
scaling | সংখ্যাসূচক স্থায়িত্ব উন্নত করতে সমস্যা পুনঃস্কেল করার প্রচেষ্টা, অথবা EMPHASIS_UNSPECIFIED হলে সমাধানকারী ডিফল্ট প্রচেষ্টা স্তর। |
iterationLimit | অন্তর্নিহিত অ্যালগরিদমের পুনরাবৃত্তির সীমাবদ্ধতা (যেমন সিমপ্লেক্স পিভট)। নির্দিষ্ট আচরণটি ব্যবহৃত সমাধানকারী এবং অ্যালগরিদমের উপর নির্ভরশীল, তবে প্রায়শই একটি নির্ধারক সমাধান সীমা দিতে পারে (আরও কনফিগারেশন প্রয়োজন হতে পারে, যেমন একটি থ্রেড)। সাধারণত এলপি, কিউপি এবং এমআইপি সমাধানকারীদের দ্বারা সমর্থিত, তবে এমআইপি সমাধানকারীদের জন্য নোডলিমিটও দেখুন। |
nodeLimit | গণনামূলক অনুসন্ধানে সমাধান করা উপ-সমস্যাগুলির সংখ্যার উপর সীমাবদ্ধতা (যেমন শাখা এবং আবদ্ধ)। অনেক সমাধানকারীর জন্য এটি গণনাকে সীমাবদ্ধ করতে ব্যবহার করা যেতে পারে (আরও কনফিগারেশন প্রয়োজন হতে পারে, যেমন একটি থ্রেড)। সাধারণত MIP সমাধানকারীদের জন্য, পুনরাবৃত্তিসীমাও দেখুন। |
cutoffLimit | সমাধানকারীটি তাড়াতাড়ি বন্ধ হয়ে যায় যদি এটি প্রমাণ করতে পারে যে অন্তত কাটঅফের মতো কোনও প্রাথমিক সমাধান নেই। প্রাথমিক স্টপে, সমাধানকারী সমাপ্তির কারণ NO_SOLUTION_FOUND এবং সীমা CUTOFF সহ ফেরত দেয় এবং কোনও অতিরিক্ত সমাধান তথ্য দেওয়ার প্রয়োজন হয় না। কোনো প্রাথমিক স্টপ না থাকলে রিটার্ন মানের উপর কোন প্রভাব নেই। এটা বাঞ্ছনীয় যে আপনি একটি সহনশীলতা ব্যবহার করুন যদি আপনি সঠিকভাবে কাটঅফ ফেরত দেওয়ার সমান উদ্দেশ্য সহ সমাধান চান। আরও বিশদ বিবরণ এবং bestBoundLimit-এর সাথে তুলনার জন্য ব্যবহারকারীর নির্দেশিকা দেখুন। |
objectiveLimit | সমাধানকারী শীঘ্রই থেমে যায় যত তাড়াতাড়ি এটি একটি সমাধান খুঁজে পেতে অন্তত এই ভাল, সমাপ্তি কারণ সম্ভাব্য এবং সীমিত উদ্দেশ্য সঙ্গে. |
bestBoundLimit | সমাধানকারীটি যত তাড়াতাড়ি তা প্রমাণ করে যত তাড়াতাড়ি সম্ভব বন্ধ হয়ে যায়, অন্তত এতটাই ভাল, সমাপ্তির কারণ FEASIBLE বা NO_SOLUTION_FOUND এবং সীমিত উদ্দেশ্য। আরো বিস্তারিত জানার জন্য ব্যবহারকারীর নির্দেশিকা দেখুন এবং কাটঅফ লিমিটের সাথে তুলনা করুন। |
solutionLimit | সমাধানকারী এই অনেকগুলি সম্ভাব্য সমাধান খুঁজে পাওয়ার পরে তাড়াতাড়ি বন্ধ হয়ে যায়, সমাপ্তির সম্ভাব্য কারণ এবং সীমিত সমাধান সহ। সেট করা থাকলে অবশ্যই শূন্যের বেশি হতে হবে। এটি প্রায়ই প্রথম সম্ভাব্য সমাধান পাওয়া সমাধানের উপর থামাতে সলভার পেতে ব্যবহার করা হয়। মনে রাখবেন যে কোনো প্রত্যাবর্তিত সমাধানের জন্য উদ্দেশ্যমূলক মূল্যের কোনো গ্যারান্টি নেই। সমাধানকারীরা সাধারণত সমাধান সীমার চেয়ে বেশি সমাধান ফেরত দেয় না, তবে এটি MathOpt দ্বারা প্রয়োগ করা হয় না, এছাড়াও b/214041169 দেখুন৷ বর্তমানে Gurobi এবং SCIP এর জন্য এবং শুধুমাত্র 1 মান সহ CP-SAT-এর জন্য সমর্থিত। |
threads | যদি সেট করা হয় তবে এটি অবশ্যই >= 1 হতে হবে। |
randomSeed | অন্তর্নিহিত সলভারে ছদ্ম-এলোমেলো নম্বর জেনারেটরের জন্য বীজ। মনে রাখবেন যে সমস্ত সমাধানকারীরা 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, randomSeed))। |
absoluteGapTolerance | এমআইপি সমাধানকারীদের জন্য একটি পরম সর্বোত্তম সহনশীলতা (প্রাথমিকভাবে)। পরম GAP হল পার্থক্যের পরম মান: * সর্বোত্তম সম্ভাব্য সমাধানের বস্তুনিষ্ঠ মান, * অনুসন্ধান দ্বারা উত্পাদিত দ্বৈত আবদ্ধ। পরম GAP সর্বোচ্চ পরম GapTolerance (যখন সেট করা হয়) হলে সমাধানকারী থামতে পারে এবং TERMINATION_REASON_OPTIMAL ফেরত দিতে পারে। সেট করা থাকলে অবশ্যই >= 0 হতে হবে। এছাড়াও আপেক্ষিকGapTolerance দেখুন। |
relativeGapTolerance | MIP সমাধানকারীদের জন্য একটি আপেক্ষিক সর্বোত্তমতা সহনশীলতা (প্রাথমিকভাবে)। আপেক্ষিক GAP হল পরম GAP-এর একটি স্বাভাবিক সংস্করণ (পরম গ্যাপটোলারেন্সে সংজ্ঞায়িত), যেখানে স্বাভাবিকীকরণ সমাধান-নির্ভর, যেমন পাওয়া সর্বোত্তম সম্ভাব্য সমাধানের উদ্দেশ্যমূলক মান দ্বারা বিভক্ত পরম GAP। আপেক্ষিক GAP সর্বাধিক আপেক্ষিকGapTolerance (যখন সেট) হয়ে গেলে সমাধানকারীটি থামতে পারে এবং TERMINATION_REASON_OPTIMAL ফেরত দিতে পারে। সেট করা থাকলে অবশ্যই >= 0 হতে হবে। এছাড়াও absoluteGapTolerance দেখুন। |
solutionPoolSize | অনুসন্ধান করার সময় |
LPAlgorithmProto
লিনিয়ার প্রোগ্রাম সমাধানের জন্য একটি অ্যালগরিদম নির্বাচন করে।
Enums | |
---|---|
LP_ALGORITHM_UNSPECIFIED | |
LP_ALGORITHM_PRIMAL_SIMPLEX | (প্রাথমিক) সিমপ্লেক্স পদ্ধতি। সাধারণত আদি ও দ্বৈত সমাধান, আদি/দ্বৈত অসীম সমস্যায় আদি/দ্বৈত রশ্মি এবং একটি ভিত্তি প্রদান করতে পারে। |
LP_ALGORITHM_DUAL_SIMPLEX | ডুয়েল সিমপ্লেক্স পদ্ধতি। সাধারণত আদি ও দ্বৈত সমাধান, আদি/দ্বৈত অসীম সমস্যায় আদি/দ্বৈত রশ্মি এবং একটি ভিত্তি প্রদান করতে পারে। |
LP_ALGORITHM_BARRIER | বাধা পদ্ধতি, সাধারণভাবে একটি অভ্যন্তরীণ পয়েন্ট পদ্ধতি (IPM) নামেও পরিচিত। সাধারণত প্রাথমিক এবং দ্বৈত উভয় সমাধান দিতে পারে। কিছু বাস্তবায়ন সীমাহীন/অসম্ভাব্য সমস্যার উপর রশ্মিও তৈরি করতে পারে। একটি ভিত্তি দেওয়া হয় না যদি না অন্তর্নিহিত সমাধানকারী "ক্রসওভার" করে এবং সিমপ্লেক্স দিয়ে শেষ না করে। |
LP_ALGORITHM_FIRST_ORDER | একটি প্রথম-ক্রম পদ্ধতির উপর ভিত্তি করে একটি অ্যালগরিদম। এগুলি সাধারণত প্রাথমিক এবং দ্বৈত উভয় সমাধান এবং সম্ভাব্য প্রাথমিক এবং/অথবা দ্বৈত অসম্ভাব্যতার শংসাপত্র তৈরি করবে। ফার্স্ট-অর্ডার পদ্ধতিগুলি সাধারণত কম নির্ভুলতার সাথে সমাধান প্রদান করে, তাই ব্যবহারকারীদের সমাধানের মানের পরামিতি (যেমন, সহনশীলতা) সেট করার এবং সমাধানগুলিকে যাচাই করার যত্ন নেওয়া উচিত। |
EmphasisProto
সমাধান করার সময় একটি ঐচ্ছিক কাজের জন্য প্রচেষ্টা স্তর প্রয়োগ করা হয় (ব্যবহারের জন্য SolveParametersProto দেখুন)।
নিম্নরূপ একটি সমাধানকারী বৈশিষ্ট্য কনফিগার করার জন্য জোর দেওয়া হয়: * যদি একটি সমাধানকারী বৈশিষ্ট্যটিকে সমর্থন না করে, তবে শুধুমাত্র অনির্দিষ্ট সর্বদা বৈধ হবে, অন্য কোনো সেটিং সাধারণত একটি অবৈধ আর্গুমেন্ট ত্রুটি হবে (কিছু সমাধানকারী বন্ধও স্বীকার করতে পারে)। * যদি সমাধানকারী বৈশিষ্ট্যটিকে সমর্থন করে: - যখন অনির্দিষ্টভাবে সেট করা হয়, তখন অন্তর্নিহিত ডিফল্ট ব্যবহার করা হয়। - যখন বৈশিষ্ট্যটি বন্ধ করা যাবে না, বন্ধ একটি ত্রুটি ফিরিয়ে দেবে। - যদি বৈশিষ্ট্যটি ডিফল্টরূপে সক্ষম করা থাকে, তাহলে সমাধানকারী ডিফল্টটি সাধারণত MEDIUM-এ ম্যাপ করা হয়৷ - যদি বৈশিষ্ট্যটি সমর্থিত হয়, নিম্ন, মাঝারি, উচ্চ এবং খুব উচ্চ কখনই একটি ত্রুটি দেবে না এবং তাদের সেরা ম্যাচের উপর মানচিত্র করবে।
Enums | |
---|---|
EMPHASIS_UNSPECIFIED | |
EMPHASIS_OFF | |
EMPHASIS_LOW | |
EMPHASIS_MEDIUM | |
EMPHASIS_HIGH | |
EMPHASIS_VERY_HIGH |
মডেলসল্ভ প্যারামিটার প্রোটো
JSON প্রতিনিধিত্ব |
---|
{ "variableValuesFilter": { object ( |
ক্ষেত্র | |
---|---|
variableValuesFilter | PrimalSolutionProto এবং PrimalRayProto (PrimalSolutionProto.variable_values, PrimalRayProto.variable_values) ভেরিয়েবল দ্বারা চাবিকৃত সমস্ত রিটার্ন করা স্পার্স কন্টেইনারে ফিল্টার প্রয়োগ করা হয়। প্রয়োজনীয়তা: * filteredIds হল VariablesProto.ids এর উপাদান। |
dualValuesFilter | ফিল্টার যা DualSolutionProto এবং DualRay (DualSolutionProto.dual_values, DualRay.dual_values) তে রৈখিক সীমাবদ্ধতা দ্বারা চাবিকৃত সমস্ত প্রত্যাবর্তিত স্পার্স পাত্রে প্রয়োগ করা হয়। প্রয়োজনীয়তা: * filteredIds হল LinearConstraints.ids এর উপাদান। |
reducedCostsFilter | ফিল্টার যা DualSolutionProto এবং DualRay (DualSolutionProto.reduced_costs, DualRay.reduced_costs) ভেরিয়েবল দ্বারা চাবিকৃত সমস্ত রিটার্ন করা স্পার্স কন্টেনারে প্রয়োগ করা হয়। প্রয়োজনীয়তা: * filteredIds হল VariablesProto.ids এর উপাদান। |
initialBasis | ওয়ার্ম স্টার্টিং সিমপ্লেক্স এলপি সলভারের জন্য ঐচ্ছিক প্রাথমিক ভিত্তি। সেট করা হলে, বর্তমান |
solutionHints[] | ঐচ্ছিক সমাধান ইঙ্গিত. অন্তর্নিহিত সমাধানকারী শুধুমাত্র একটি ইঙ্গিত গ্রহণ করলে, প্রথম ইঙ্গিতটি ব্যবহার করা হয়। |
branchingPriorities | ঐচ্ছিক শাখা অগ্রাধিকার. উচ্চতর মান সহ ভেরিয়েবলগুলি প্রথমে ব্রাঞ্চ করা হবে। যে ভেরিয়েবলগুলির জন্য অগ্রাধিকার সেট করা হয় না সেগুলি সমাধানকারীর ডিফল্ট অগ্রাধিকার পায় (সাধারণত শূন্য)। প্রয়োজনীয়তা: * branchingPriorities.values সীমিত হতে হবে। * branchingPriorities.ids অবশ্যই VariablesProto.ids এর উপাদান হতে হবে। |
SparseVectorFilterProto
এই বার্তাটি একটি SparseXxxxVector এর নির্দিষ্ট অংশ জিজ্ঞাসা/সেট করার অনুমতি দেয়। ডিফল্ট আচরণ কিছু ফিল্টার আউট না. একটি সাধারণ ব্যবহার হল সমাধানের শুধুমাত্র অংশগুলি জিজ্ঞাসা করা (শুধুমাত্র অ-শূন্য মান, এবং/অথবা পরিবর্তনশীল মানগুলির একটি হাতে বাছাই করা সেট)।
JSON প্রতিনিধিত্ব |
---|
{ "skipZeroValues": boolean, "filterByIds": boolean, "filteredIds": [ string ] } |
ক্ষেত্র | |
---|---|
skipZeroValues | SparseBoolVectorProto এর জন্য "শূন্য" |
filterByIds | সত্য হলে, ফিল্টার করা আইডিতে তালিকাভুক্ত আইডিগুলির সাথে সংশ্লিষ্ট মানগুলিই ফেরত দিন। |
filteredIds[] | filterByIds সত্য হলে ব্যবহার করার জন্য আইডিগুলির তালিকা৷ filterByIds মিথ্যা হলে খালি হতে হবে। দ্রষ্টব্য: যদি এটি খালি হয়, এবং filterByIds সত্য হয়, আপনি বলছেন যে আপনি ফলাফলে কোনো তথ্য চান না। |
বেসিসপ্রোটো
একটি লিনিয়ার প্রোগ্রামের সমাধানের জন্য একটি সমন্বিত বৈশিষ্ট্য।
রৈখিক প্রোগ্রামগুলি সমাধানের জন্য সিমপ্লেক্স পদ্ধতি সর্বদা একটি "মৌলিক সম্ভাব্য সমাধান" প্রদান করে যা একটি বেসিস দ্বারা সমন্বিতভাবে বর্ণনা করা যেতে পারে। একটি ভিত্তি প্রতিটি পরিবর্তনশীল এবং রৈখিক সীমাবদ্ধতার জন্য একটি 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 কেও সন্তুষ্ট করে।
JSON প্রতিনিধিত্ব |
---|
{ "constraintStatus": { object ( |
ক্ষেত্র | |
---|---|
constraintStatus | সীমাবদ্ধতার ভিত্তিতে অবস্থা। প্রয়োজনীয়তা: * constraintStatus.ids সমান LinearConstraints.ids। |
variableStatus | পরিবর্তনশীল ভিত্তি অবস্থা। প্রয়োজনীয়তা: * constraintStatus.ids হল VariablesProto.ids এর সমান। |
basicDualFeasibility | এটি একটি উন্নত বৈশিষ্ট্য যা ম্যাথঅপ্ট দ্বারা সাবঅপ্টিমাল LP সমাধানগুলির সম্ভাব্যতা চিহ্নিত করতে ব্যবহৃত হয় (অনুকূল সমাধানগুলির সর্বদা SOLUTION_STATUS_FEASIBLE স্থিতি থাকবে)৷ একক-পার্শ্বযুক্ত LPগুলির জন্য এটি সংশ্লিষ্ট দ্বৈত সমাধানের সম্ভাব্যতার স্থিতির সমান হওয়া উচিত। দ্বি-পার্শ্বযুক্ত LP-এর ক্ষেত্রে এটি কিছু প্রান্তের ক্ষেত্রে ভিন্ন হতে পারে (যেমন প্রাইমাল সিমপ্লেক্সের সাথে অসম্পূর্ণ সমাধান)। আপনি যদি ModelSolveParametersProto.initial_basis এর মাধ্যমে একটি প্রারম্ভিক ভিত্তি প্রদান করেন, তাহলে এই মানটিকে উপেক্ষা করা হবে। এটি শুধুমাত্র SolutionProto.basis দ্বারা প্রত্যাবর্তিত ভিত্তির জন্য প্রাসঙ্গিক। |
SparseBasisStatusVector
ভিত্তি অবস্থার একটি ভেক্টরের একটি বিক্ষিপ্ত উপস্থাপনা।
JSON প্রতিনিধিত্ব |
---|
{
"ids": [
string
],
"values": [
enum ( |
ক্ষেত্র | |
---|---|
ids[] | সমস্ত উপাদান স্বতন্ত্র সহ (ক্রমবর্ধমান ক্রমানুসারে) বাছাই করা আবশ্যক। |
values[] | আইডির সমান দৈর্ঘ্য থাকতে হবে। |
বেসিস স্ট্যাটাস প্রোটো
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 | পরিবর্তনশীল/সীমাবদ্ধতা মৌলিক। |
সমাধান স্ট্যাটাসপ্রোটো
সমাধানকারীর দাবি অনুযায়ী প্রাথমিক বা দ্বৈত সমাধানের সম্ভাব্যতা।
Enums | |
---|---|
SOLUTION_STATUS_UNSPECIFIED | গার্ড মান কোন অবস্থা প্রতিনিধিত্ব করে. |
SOLUTION_STATUS_UNDETERMINED | সমাধানকারী একটি সম্ভাব্যতা স্থিতি দাবি করে না। |
SOLUTION_STATUS_FEASIBLE | সমাধানকারী দাবি করে যে সমাধানটি সম্ভব। |
SOLUTION_STATUS_INFEASIBLE | সমাধানকারী দাবি করে যে সমাধানটি অসম্ভব। |
সমাধান হিন্টপ্রোটো
সমাধানকারীর জন্য একটি প্রস্তাবিত শুরু সমাধান।
এমআইপি সমাধানকারীরা সাধারণত শুধুমাত্র প্রাথমিক তথ্য চায় ( variableValues
), যখন এলপি সমাধানকারীরা প্রাথমিক এবং দ্বৈত উভয় তথ্য ( dualValues
) চায়।
অনেক এমআইপি সমাধানকারী এর সাথে কাজ করতে পারে: (1) আংশিক সমাধান যা সমস্ত ভেরিয়েবল নির্দিষ্ট করে না বা (2) অসম্ভাব্য সমাধান। এই ক্ষেত্রে, সমাধানকারীরা সাধারণত ইঙ্গিতটি সম্পূর্ণ/শুদ্ধ করার জন্য একটি সাব-এমআইপি সমাধান করে।
কীভাবে ইঙ্গিতটি সমাধানকারী দ্বারা ব্যবহৃত হয়, যদি আদৌ তা সমাধানকারী, সমস্যার ধরন এবং ব্যবহৃত অ্যালগরিদমের উপর অত্যন্ত নির্ভরশীল। আপনার ইঙ্গিতটির প্রভাব রয়েছে তা নিশ্চিত করার সবচেয়ে নির্ভরযোগ্য উপায় হল অন্তর্নিহিত সমাধানকারী লগগুলি ইঙ্গিত সহ এবং ছাড়াই পড়া।
সিমপ্লেক্স-ভিত্তিক LP সমাধানকারীরা সাধারণত একটি সমাধান ইঙ্গিতের জন্য প্রাথমিক ভিত্তি পছন্দ করে (অন্যথায় ইঙ্গিতটিকে একটি মৌলিক সম্ভাব্য সমাধানে রূপান্তর করতে তাদের ক্রসওভার করতে হবে)।
JSON প্রতিনিধিত্ব |
---|
{ "variableValues": { object ( |
ক্ষেত্র | |
---|---|
variableValues | সমস্যার প্রাথমিক ভেরিয়েবলের মানগুলির একটি সম্ভবত আংশিক বরাদ্দ৷ এই উপ-বার্তার জন্য সমাধানকারী-স্বাধীন প্রয়োজনীয়তাগুলি হল: * variableValues.ids হল VariablesProto.ids-এর উপাদান। * variableValues.values সব সীমিত হতে হবে। |
dualValues | সমস্যাটির রৈখিক সীমাবদ্ধতার মানগুলির একটি (সম্ভাব্য আংশিক) বরাদ্দ৷ প্রয়োজনীয়তা: * dualValues.ids হল LinearConstraintsProto.ids এর উপাদান। * dualValues.values সব সীমিত হতে হবে। |
SparseInt32VectorProto
ints এর ভেক্টরের একটি বিক্ষিপ্ত উপস্থাপনা।
JSON প্রতিনিধিত্ব |
---|
{ "ids": [ string ], "values": [ integer ] } |
ক্ষেত্র | |
---|---|
ids[] | সমস্ত উপাদান স্বতন্ত্র সহ (ক্রমবর্ধমান ক্রমানুসারে) সাজানো উচিত। |
values[] | আইডির সমান দৈর্ঘ্য থাকতে হবে। |
SolveResultProto
যখন প্রাথমিক/দ্বৈত সমাধান/রশ্মি জটিল হয় তার চুক্তি, সম্পূর্ণ বিবরণের জন্য termination_reasons.md দেখুন।
একটি সঠিক চুক্তি চূড়ান্ত না হওয়া পর্যন্ত, সমাপ্তির কারণের উপর নির্ভর করার পরিবর্তে একটি সমাধান/রে উপস্থিত আছে কিনা তা পরীক্ষা করা সবচেয়ে নিরাপদ।
JSON প্রতিনিধিত্ব |
---|
{ "termination": { object ( |
ক্ষেত্র | |
---|---|
termination | কারণ সমাধানকারী বন্ধ. |
solutions[] | ভবিষ্যত সমাধানকারীদের যে সমাধানের ক্রম প্রয়োগ করা উচিত তার জন্য সাধারণ চুক্তি হল: 1. একটি প্রাথমিক সম্ভাব্য সমাধান সহ সমাধানগুলি, সর্বোত্তম প্রাথমিক উদ্দেশ্য দ্বারা প্রথমে অর্ডার করা। 2. একটি দ্বৈত সম্ভাব্য সমাধান সহ সমাধান, সর্বোত্তম দ্বৈত উদ্দেশ্য (অজানা দ্বৈত উদ্দেশ্য সবচেয়ে খারাপ) দ্বারা আদেশ 3. বাকি সমস্ত সমাধান যে কোনও ক্রমে ফেরত দেওয়া যেতে পারে। |
primalRays[] | সীমাহীন প্রাথমিক উন্নতির দিকনির্দেশ, বা সমতুল্য, দ্বৈত অসম্ভাব্যতা শংসাপত্র। সাধারণত TerminationReasonProtos UNBOUNDED এবং DUAL_INFEASIBLE এর জন্য প্রদান করা হয় |
dualRays[] | সীমাহীন দ্বৈত উন্নতির দিকনির্দেশ, বা সমতুল্য, প্রাথমিক অসম্ভাব্যতা শংসাপত্র। সাধারণত TerminationReasonProto অসম্ভাব্য জন্য প্রদান করা হয়. |
solveStats | সমাধান প্রক্রিয়ার পরিসংখ্যান, যেমন চলমান সময়, পুনরাবৃত্তি। |
সমাপ্তি প্রোটো
কেন সমাধান () করার জন্য একটি কল বন্ধ করা হয়েছে সে সম্পর্কিত সমস্ত তথ্য।
JSON প্রতিনিধিত্ব |
---|
{ "reason": enum ( |
ক্ষেত্র | |
---|---|
reason | TERMINATION_REASON_FEASIBLE বা TERMINATION_REASON_NO_SOLUTION_FOUND হলে অতিরিক্ত তথ্য |
limit | LIMIT_UNSPECIFIED যদি না কারণ TERMINATION_REASON_FEASIBLE বা TERMINATION_REASON_NO_SOLUTION_FOUND হয়৷ সমস্ত সমাধানকারী সর্বদা সীমা নির্ধারণ করতে পারে না যার কারণে সমাপ্তি ঘটে, LIMIT_UNDETERMINED ব্যবহার করা হয় যখন কারণ নির্ধারণ করা যায় না। |
detail | সমাপ্তি সম্পর্কে অতিরিক্ত সাধারণত সমাধানকারী নির্দিষ্ট তথ্য। |
problemStatus | প্রাথমিক এবং দ্বৈত সমস্যার জন্য সম্ভাব্যতা অবস্থা। 18 জুলাই, 2023 থেকে এই বার্তাটি অনুপস্থিত থাকতে পারে। অনুপস্থিত থাকলে, সমস্যার স্থিতি SolveResultProto.solve_stats-এ পাওয়া যাবে। |
objectiveBounds | সর্বোত্তম উদ্দেশ্য মানের উপর সীমানা। 18 জুলাই, 2023 থেকে এই বার্তাটি অনুপস্থিত থাকতে পারে। অনুপস্থিত থাকলে, objectiveBounds.primal_bound পাওয়া যাবে SolveResultProto.solve.stats.best_primal_bound এবং objectiveBounds.dual_bound পাওয়া যাবে SolveResultProto.solve.stats.best_dual_bound-এ। |
TerminationReasonProto
সমাধান() কল বন্ধ হওয়ার কারণ।
Enums | |
---|---|
TERMINATION_REASON_UNSPECIFIED | |
TERMINATION_REASON_OPTIMAL | একটি সম্ভাব্য সর্বোত্তম সমাধান (সংখ্যাগত সহনশীলতা পর্যন্ত) পাওয়া গেছে। |
TERMINATION_REASON_INFEASIBLE | প্রাথমিক সমস্যার কোন সম্ভাব্য সমাধান নেই। |
TERMINATION_REASON_UNBOUNDED | প্রাথমিক সমস্যাটি সম্ভাব্য এবং নির্বিচারে একটি প্রাথমিক রশ্মি বরাবর ভাল সমাধান পাওয়া যেতে পারে। |
TERMINATION_REASON_INFEASIBLE_OR_UNBOUNDED | প্রাথমিক সমস্যাটি হয় অসম্ভাব্য বা সীমাহীন। সমস্যার স্থিতির আরও বিশদ বিবরণ solveStats.problem_status এ উপলব্ধ হতে পারে। মনে রাখবেন গুরোবির সীমাহীন অবস্থা এখানে ম্যাপ করা যেতে পারে। |
TERMINATION_REASON_IMPRECISE | সমস্যাটি উপরের মানদণ্ডগুলির একটিতে সমাধান করা হয়েছিল (অনুকূল, অকার্যকর, অবাউন্ডেড, বা ইনফেসিবলঅরআনবাউন্ডেড), কিন্তু এক বা একাধিক সহনশীলতা পূরণ হয়নি। কিছু প্রাথমিক/দ্বৈত সমাধান/রশ্মি উপস্থিত থাকবে, কিন্তু হয় সেগুলি কিছুটা অসম্ভাব্য হবে, অথবা (যদি সমস্যাটি প্রায় সর্বোত্তম ছিল) তাদের সর্বোত্তম সমাধান উদ্দেশ্য এবং সর্বোত্তম উদ্দেশ্য আবদ্ধের মধ্যে একটি ব্যবধান হতে পারে। ব্যবহারকারীরা এখনও প্রাথমিক/দ্বৈত সমাধান/রশ্মি এবং সমাধান পরিসংখ্যান জিজ্ঞাসা করতে পারে, তবে তারা সংখ্যাগত অপূর্ণতা মোকাবেলার জন্য দায়ী। |
TERMINATION_REASON_FEASIBLE | অপ্টিমাইজার কিছু সীমাতে পৌঁছেছে এবং একটি প্রাথমিক সম্ভাব্য সমাধান ফিরিয়ে দেওয়া হয়েছে। যে ধরনের সীমা পৌঁছেছে তার বিশদ বিবরণের জন্য SolveResultProto.limit_detail দেখুন। |
TERMINATION_REASON_NO_SOLUTION_FOUND | অপ্টিমাইজার কিছু সীমাতে পৌঁছেছে এবং এটি একটি প্রাথমিক সম্ভাব্য সমাধান খুঁজে পায়নি। যে ধরনের সীমা পৌঁছেছে তার বিশদ বিবরণের জন্য SolveResultProto.limit_detail দেখুন। |
TERMINATION_REASON_NUMERICAL_ERROR | অ্যালগরিদমটি বন্ধ হয়ে গেছে কারণ এটি পুনরুদ্ধারযোগ্য সংখ্যাগত ত্রুটির সম্মুখীন হয়েছে৷ কোন সমাধান তথ্য পাওয়া যায় না. |
TERMINATION_REASON_OTHER_ERROR | অ্যালগরিদমটি একটি ত্রুটির কারণে বন্ধ হয়ে গেছে যা উপরে সংজ্ঞায়িত স্থিতিগুলির মধ্যে একটি দ্বারা আচ্ছাদিত হয়নি৷ কোন সমাধান তথ্য পাওয়া যায় না. |
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-এ সীমা সম্পর্কে অতিরিক্ত তথ্য থাকতে পারে। |
সমস্যা স্ট্যাটাস প্রোটো
প্রাথমিক সমস্যার সম্ভাব্যতা স্থিতি এবং তার দ্বৈত (বা একটি ক্রমাগত শিথিলকরণের দ্বৈত) সমাধানকারীর দাবি অনুসারে। সমাধানকারীকে দাবির জন্য একটি শংসাপত্র ফেরত দেওয়ার প্রয়োজন নেই (যেমন সমাধানকারী একটি প্রাথমিক সম্ভাব্য সমাধান না ফিরিয়ে প্রাথমিক সম্ভাব্যতা দাবি করতে পারে)। এই সম্মিলিত স্থিতিটি সমাধানকারীর দাবির সম্ভাব্যতা এবং সমাধানকৃত সমস্যার সীমাহীনতা সম্পর্কে একটি বিস্তৃত বিবরণ দেয়। এই ক্ষেত্রে,
- প্রাথমিক এবং দ্বৈত সমস্যার জন্য একটি সম্ভাব্য অবস্থা নির্দেশ করে যে প্রাথমিকটি সম্ভাব্য এবং আবদ্ধ এবং সম্ভবত একটি সর্বোত্তম সমাধান রয়েছে (অ-রৈখিক সীমাবদ্ধতা ছাড়াই সমস্যার জন্য গ্যারান্টিযুক্ত)।
- একটি প্রাথমিক সম্ভাব্য এবং একটি দ্বৈত অসম্ভাব্য অবস্থা নির্দেশ করে প্রাথমিক সমস্যাটি সীমাহীন (অর্থাৎ নির্বিচারে ভাল সমাধান রয়েছে)।
মনে রাখবেন যে একটি দ্বৈত অসম্ভাব্য অবস্থা নিজেই (অর্থাৎ একটি অনির্ধারিত প্রাথমিক অবস্থার সাথে) প্রাথমিক সমস্যাটিকে সীমাহীন বোঝায় না কারণ আমাদের উভয় সমস্যাই অসম্ভাব্য হতে পারে। এছাড়াও, যদিও একটি প্রাথমিক এবং দ্বৈত সম্ভাব্য অবস্থা একটি সর্বোত্তম সমাধানের অস্তিত্বকে বোঝাতে পারে, এটি গ্যারান্টি দেয় না যে সমাধানকারী আসলে এই ধরনের সর্বোত্তম সমাধান খুঁজে পেয়েছে।
JSON প্রতিনিধিত্ব |
---|
{ "primalStatus": enum ( |
ক্ষেত্র | |
---|---|
primalStatus | প্রাথমিক সমস্যার জন্য স্থিতি. |
dualStatus | দ্বৈত সমস্যার জন্য স্ট্যাটাস (বা ক্রমাগত শিথিলতার দ্বৈত জন্য)। |
primalOrDualInfeasible | সত্য হলে, সমাধানকারী দাবি করে যে প্রাথমিক বা দ্বৈত সমস্যাটি অসম্ভাব্য, কিন্তু কোনটি (বা উভয়ই অসম্ভাব্য) তা জানে না। primal_problem_status = dual_problem_status = kUndetermined শুধুমাত্র তখনই সত্য হতে পারে। এই অতিরিক্ত তথ্যটি প্রায়ই প্রয়োজন হয় যখন প্রিপ্রসেসিং নির্ধারণ করে যে সমস্যার কোন সর্বোত্তম সমাধান নেই (তবে এটি অসম্ভাব্যতা, সীমাহীনতা বা উভয়ের কারণে তা নির্ধারণ করতে পারে না)। |
সম্ভাব্যতা স্ট্যাটাস প্রোটো
সমাধানকারীর দ্বারা দাবি করা সমস্যার সম্ভাব্যতা অবস্থা (সমাধানকারীকে দাবির জন্য একটি শংসাপত্র ফেরত দিতে হবে না)।
Enums | |
---|---|
FEASIBILITY_STATUS_UNSPECIFIED | গার্ড মান কোন অবস্থা প্রতিনিধিত্ব করে. |
FEASIBILITY_STATUS_UNDETERMINED | সমাধানকারী একটি স্ট্যাটাস দাবি করে না। |
FEASIBILITY_STATUS_FEASIBLE | সমাধানকারী দাবি করে যে সমস্যাটি সম্ভব। |
FEASIBILITY_STATUS_INFEASIBLE | সমাধানকারী দাবি করে যে সমস্যাটি অসম্ভব। |
ObjectiveBoundsProto
সর্বোত্তম উদ্দেশ্য মানের উপর সীমানা।
JSON প্রতিনিধিত্ব |
---|
{ "primalBound": number, "dualBound": number } |
ক্ষেত্র | |
---|---|
primalBound | সমাধানকারী দাবি করে যে সর্বোত্তম মান সমান বা ভাল (নূন্যতমকরণের জন্য ছোট এবং সর্বাধিকীকরণের জন্য বড়) যেমন আবদ্ধ আছে দাবি করে না. * প্রাইমালবাউন্ড সর্বোত্তম প্রাথমিক সম্ভাব্য সমাধানের উদ্দেশ্যের চেয়ে সর্বোত্তম মানের কাছাকাছি হতে পারে। বিশেষ করে, প্রাইমালবাউন্ড অ-তুচ্ছ হতে পারে এমনকি যখন কোনো প্রাথমিক সম্ভাব্য সমাধান ফেরত না দেওয়া হয়। সতর্কতা: সুনির্দিষ্ট দাবি হল একটি প্রাথমিক সমাধান রয়েছে যা: * সংখ্যাগতভাবে সম্ভাব্য (অর্থাৎ সমাধানকারীদের সহনশীলতা পর্যন্ত সম্ভব), এবং * এর একটি উদ্দেশ্যমূলক মান প্রাইমালবাউন্ড রয়েছে। এই সাংখ্যিকভাবে সম্ভাব্য সমাধানটি কিছুটা অসম্ভাব্য হতে পারে, এই ক্ষেত্রে প্রিম্যালবাউন্ড সর্বোত্তম মানের চেয়ে কঠোরভাবে ভাল হতে পারে। প্রাথমিক সম্ভাব্যতা সহনশীলতাকে প্রাইমালবাউন্ডে সহনশীলতায় অনুবাদ করা অ-তুচ্ছ, বিশেষ করে যখন সম্ভাব্যতা সহনশীলতা তুলনামূলকভাবে বড় হয় (যেমন যখন PDLP এর সাথে সমাধান করা হয়)। |
dualBound | সমাধানকারী দাবি করে যে সলভারের দ্বৈত সম্ভাব্যতা সহনশীলতা পর্যন্ত দ্বৈতবাউন্ডের চেয়ে সর্বোত্তম মান সমান বা খারাপ (নিম্নকরণের জন্য বড় এবং সর্বাধিক করার জন্য ছোট) যেমন আবদ্ধ আছে দাবি করে না. একইভাবে প্রাইমালবাউন্ডের মতো, এটি কিছু সমাধানকারীর ক্ষেত্রেও ঘটতে পারে এমনকি যখন সর্বোত্তম ফিরে আসে। MIP সমাধানকারীরা সাধারণত একটি বাউন্ড রিপোর্ট করবে যদিও এটি অসম্পূর্ণ হয়। * ক্রমাগত সমস্যার জন্য ডুয়ালবাউন্ড সর্বোত্তম দ্বৈত সম্ভাব্য সমাধানের লক্ষ্যের চেয়ে সর্বোত্তম মানের কাছাকাছি হতে পারে। এমআইপি-র জন্য ডুয়ালবাউন্ডের প্রথম অ-তুচ্ছ মানগুলির মধ্যে একটি হল প্রায়ই এমআইপি-এর এলপি শিথিলকরণের সর্বোত্তম মান। * ডুয়ালবাউন্ড ভাল হওয়া উচিত (নিম্নকরণের জন্য ছোট এবং সর্বাধিকীকরণের জন্য বড়) সমাধানকারীদের সহনশীলতা পর্যন্ত আবদ্ধ (নীচে সতর্কতা দেখুন)। সতর্কতা: * ক্রমাগত সমস্যার জন্য, সুনির্দিষ্ট দাবি হল একটি দ্বৈত সমাধান রয়েছে যা: * সংখ্যাগতভাবে সম্ভাব্য (অর্থাৎ সমাধানকারীদের সহনশীলতা পর্যন্ত সম্ভব), এবং * এর একটি উদ্দেশ্যমূলক মান ডুয়ালবাউন্ড রয়েছে। এই সাংখ্যিকভাবে সম্ভাব্য সমাধানটি কিছুটা অসম্ভাব্য হতে পারে, এই ক্ষেত্রে ডুয়ালবাউন্ড সর্বোত্তম মান এবং প্রাইমালবাউন্ডের চেয়ে কঠোরভাবে খারাপ হতে পারে। প্রাথমিক ক্ষেত্রের মতোই, ডুয়াল বাউন্ডের সহনশীলতায় দ্বৈত সম্ভাব্যতা সহনশীলতা অনুবাদ করা অ-তুচ্ছ, বিশেষ করে যখন সম্ভাব্যতা সহনশীলতা তুলনামূলকভাবে বড়। যাইহোক, কিছু সমাধানকারী ডুয়ালবাউন্ডের একটি সংশোধিত সংস্করণ সরবরাহ করে যা সংখ্যাগতভাবে নিরাপদ হতে পারে। এই সংশোধন করা সংস্করণটি সমাধানকারীর নির্দিষ্ট আউটপুটের মাধ্যমে অ্যাক্সেস করা যেতে পারে (যেমন PDLP, pdlp_output.convergence_information.corrected_dual_objective)। * MIP সমাধানকারীদের জন্য, ডুয়ালবাউন্ড কিছু ক্রমাগত শিথিলকরণের জন্য একটি দ্বৈত সমাধানের সাথে যুক্ত হতে পারে (যেমন এলপি শিথিলকরণ), তবে এটি প্রায়শই সলভার্স এক্সিকিউশনের একটি জটিল পরিণতি এবং সাধারণত এলপি সলভারদের দ্বারা রিপোর্ট করা সীমার চেয়ে বেশি অশুদ্ধ। |
সমাধান প্রোটো
একটি সমাধানে কী অন্তর্ভুক্ত করা হয়েছে তা নির্ভর করে সমস্যা এবং সমাধানকারীর উপর। বর্তমান সাধারণ নিদর্শন হল 1. MIP সমাধানকারী শুধুমাত্র একটি প্রাথমিক সমাধান প্রদান করে। 2. সিমপ্লেক্স এলপি সলভারগুলি প্রায়শই একটি ভিত্তি এবং এই ভিত্তির সাথে সম্পর্কিত প্রাথমিক এবং দ্বৈত সমাধান প্রদান করে। 3. অন্যান্য অবিচ্ছিন্ন সমাধানকারীরা প্রায়শই একটি প্রাথমিক এবং দ্বৈত সমাধান সমাধান প্রদান করে যা একটি সলভার-নির্ভর আকারে সংযুক্ত থাকে।
প্রয়োজনীয়তা: * অন্তত একটি ক্ষেত্র সেট করা আবশ্যক; একটি সমাধান খালি হতে পারে না।
JSON প্রতিনিধিত্ব |
---|
{ "primalSolution": { object ( |
ক্ষেত্র | |
---|---|
primalSolution | |
dualSolution | |
basis | |
PrimalSolutionProto
একটি অপ্টিমাইজেশান সমস্যার সমাধান।
যেমন একটি সাধারণ রৈখিক প্রোগ্রাম বিবেচনা করুন: min c * x st A * x >= bx >= 0। একটি প্রাথমিক সমাধান হল x এর অ্যাসাইনমেন্ট মান। এটি সম্ভবপর যদি এটি উপরে থেকে A * x >= b এবং x >= 0 সন্তুষ্ট করে। নীচের PrimalSolutionProto বার্তায়, পরিবর্তনশীল মান হল x এবং উদ্দেশ্যমূল হল c * x।
JSON প্রতিনিধিত্ব |
---|
{ "variableValues": { object ( |
ক্ষেত্র | |
---|---|
variableValues | প্রয়োজনীয়তা: * variableValues.ids হল VariablesProto.ids এর উপাদান। * variableValues.values সব সীমিত হতে হবে। |
objectiveValue | অন্তর্নিহিত সমাধানকারী দ্বারা গণনা করা উদ্দেশ্য মান। অসীম বা NaN হতে পারে না। |
auxiliaryObjectiveValues | অন্তর্নিহিত সমাধানকারী দ্বারা গণনা করা সহায়ক বস্তুগত মান। কীগুলি অবশ্যই বৈধ অক্জিলিয়ারী উদ্দেশ্য আইডি হতে হবে৷ মান অসীম বা NaN হতে পারে না। |
feasibilityStatus | অন্তর্নিহিত সমাধানকারী অনুযায়ী সমাধানের সম্ভাব্যতা অবস্থা। |
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 হল উদ্দেশ্যমূলক মান৷
JSON প্রতিনিধিত্ব |
---|
{ "dualValues": { object ( |
ক্ষেত্র | |
---|---|
dualValues | প্রয়োজনীয়তা: * dualValues.ids হল LinearConstraints.ids এর উপাদান। * dualValues.values সব সীমিত হতে হবে। |
reducedCosts | প্রয়োজনীয়তা: * reducedCosts.ids হল VariablesProto.ids-এর উপাদান। * reducedCosts.values সব সীমিত হতে হবে। |
feasibilityStatus | অন্তর্নিহিত সমাধানকারী অনুযায়ী সমাধানের সম্ভাব্যতা অবস্থা। |
objectiveValue | |
PrimalRayProto
একটি অপ্টিমাইজেশান সমস্যা সীমাহীন উন্নতির একটি দিক; সমানভাবে, দ্বৈত অপ্টিমাইজেশান সমস্যার জন্য অযোগ্যতার একটি শংসাপত্র।
যেমন একটি সাধারণ রৈখিক প্রোগ্রাম বিবেচনা করুন: min c * x st A * x >= bx >= 0 একটি প্রাথমিক রশ্মি হল একটি x যা সন্তুষ্ট করে: c * x < 0 A * x >= 0 x >= 0 লক্ষ্য করুন যে একটি সম্ভাব্য সমাধান, প্রাথমিক রশ্মির যেকোনো ধনাত্মক মাল্টিপল প্লাস সেই দ্রবণটি এখনও সম্ভবপর, এবং একটি ভাল বস্তুনিষ্ঠ মান দেয়। একটি প্রাথমিক রশ্মি দ্বৈত অপ্টিমাইজেশান সমস্যাটিকে অসম্ভাব্য প্রমাণ করে।
নীচের PrimalRay বার্তায়, পরিবর্তনশীল মান হল x।
JSON প্রতিনিধিত্ব |
---|
{
"variableValues": {
object ( |
ক্ষেত্র | |
---|---|
variableValues | প্রয়োজনীয়তা: * variableValues.ids হল VariablesProto.ids এর উপাদান। * variableValues.values সব সীমিত হতে হবে। |
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 হল হ্রাসকৃত মূল্য৷
JSON প্রতিনিধিত্ব |
---|
{ "dualValues": { object ( |
ক্ষেত্র | |
---|---|
dualValues | প্রয়োজনীয়তা: * dualValues.ids হল LinearConstraints.ids এর উপাদান। * dualValues.values সব সীমিত হতে হবে। |
reducedCosts | প্রয়োজনীয়তা: * reducedCosts.ids হল VariablesProto.ids-এর উপাদান। * reducedCosts.values সব সীমিত হতে হবে। |
SolveStatsProto
JSON প্রতিনিধিত্ব |
---|
{
"solveTime": string,
"problemStatus": {
object ( |
ক্ষেত্র | |
---|---|
solveTime | math_opt দ্বারা পরিমাপ করা প্রাচীর ঘড়ির সময়, মোটামুটি Solver::Solve() এর ভিতরের সময়। দ্রষ্টব্য: এটি মডেল তৈরির কাজ অন্তর্ভুক্ত করে না। নয়টি পর্যন্ত ভগ্নাংশের সংখ্যা সহ সেকেন্ডে একটি সময়কাল, ' |
problemStatus | প্রাথমিক এবং দ্বৈত সমস্যার জন্য সম্ভাব্যতা অবস্থা। |
simplexIterations | |
barrierIterations | |
firstOrderIterations | |
nodeCount | |