Method: mathopt.solveMathOptModel

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

HTTP অনুরোধ

POST https://optimization.googleapis.com/v1/mathopt:solveMathOptModel

URL gRPC ট্রান্সকোডিং সিনট্যাক্স ব্যবহার করে।

শরীরের অনুরোধ

অনুরোধের অংশে নিম্নলিখিত কাঠামো সহ ডেটা রয়েছে:

JSON প্রতিনিধিত্ব
{
  "solverType": enum (SolverTypeProto),
  "model": {
    object (ModelProto)
  },
  "parameters": {
    object (SolveParametersProto)
  },
  "modelParameters": {
    object (ModelSolveParametersProto)
  }
}
ক্ষেত্র
solverType

enum ( SolverTypeProto )

ঐচ্ছিক। সংখ্যাগতভাবে সমস্যা সমাধানের জন্য সমাধানকারী প্রকার। মনে রাখবেন যে যদি একটি সমাধানকারী মডেলের একটি নির্দিষ্ট বৈশিষ্ট্য সমর্থন না করে, তাহলে অপ্টিমাইজেশন পদ্ধতি সফল হবে না।

model

object ( ModelProto )

প্রয়োজন। সমাধান করার জন্য অপ্টিমাইজেশন সমস্যার একটি গাণিতিক উপস্থাপনা।

parameters

object ( SolveParametersProto )

ঐচ্ছিক। একটি একক সমাধান নিয়ন্ত্রণ করার পরামিতি। enableOutput প্যারামিটারটি বিশেষভাবে পরিচালনা করা হয়। সমাধানকারীদের জন্য যারা বার্তা কলব্যাক সমর্থন করে, এটিকে সত্যে সেট করলে সার্ভার একটি বার্তা কলব্যাক নিবন্ধন করবে। ফলস্বরূপ বার্তাগুলি SolveMathOptModelResponse.messages এ ফেরত দেওয়া হবে। অন্যান্য সমাধানকারীদের জন্য, enableOutput কে সত্যে সেট করার ফলে একটি ত্রুটি দেখা দেবে।

modelParameters

object ( ModelSolveParametersProto )

ঐচ্ছিক। ইনপুট মডেলের জন্য নির্দিষ্ট একটি একক সমাধান নিয়ন্ত্রণ করার পরামিতি (মডেল স্বাধীন প্যারামিটারের জন্য SolveParametersProto দেখুন)।

প্রতিক্রিয়া শরীর

MathOpt এ একটি unary রিমোট সমাধানের জন্য প্রতিক্রিয়া।

সফল হলে, প্রতিক্রিয়া বডিতে নিম্নলিখিত কাঠামোর সাথে ডেটা থাকে:

JSON প্রতিনিধিত্ব
{
  "result": {
    object (SolveResultProto)
  },
  "messages": [
    string
  ]
}
ক্ষেত্র
result

object ( SolveResultProto )

অনুরোধে মডেল সমাধানের আউটপুট বর্ণনা।

messages[]

string

যদি 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 (VariablesProto)
  },
  "objective": {
    object (ObjectiveProto)
  },
  "auxiliaryObjectives": {
    string: {
      object (ObjectiveProto)
    },
    ...
  },
  "linearConstraints": {
    object (LinearConstraintsProto)
  },
  "linearConstraintMatrix": {
    object (SparseDoubleMatrixProto)
  },
  "quadraticConstraints": {
    string: {
      object (QuadraticConstraintProto)
    },
    ...
  },
  "secondOrderConeConstraints": {
    string: {
      object (SecondOrderConeConstraintProto)
    },
    ...
  },
  "sos1Constraints": {
    string: {
      object (SosConstraintProto)
    },
    ...
  },
  "sos2Constraints": {
    string: {
      object (SosConstraintProto)
    },
    ...
  },
  "indicatorConstraints": {
    string: {
      object (IndicatorConstraintProto)
    },
    ...
  }
}
ক্ষেত্র
name

string

variables

object ( VariablesProto )

objective

object ( ObjectiveProto )

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

auxiliaryObjectives

map (key: string ( int64 format), value: object ( ObjectiveProto ))

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

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

"key": value জোড়া। উদাহরণ: { "name": "wrench", "mass": "1.3kg", "count": "3" }

linearConstraints

object ( LinearConstraintsProto )

linearConstraintMatrix

object ( SparseDoubleMatrixProto )

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

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

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

quadraticConstraints

map (key: string ( int64 format), value: object ( QuadraticConstraintProto ))

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

"key": value জোড়া। উদাহরণ: { "name": "wrench", "mass": "1.3kg", "count": "3" }

secondOrderConeConstraints

map (key: string ( int64 format), value: object ( SecondOrderConeConstraintProto ))

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

"key": value জোড়া। উদাহরণ: { "name": "wrench", "mass": "1.3kg", "count": "3" }

sos1Constraints

map (key: string ( int64 format), value: object ( SosConstraintProto ))

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

"key": value জোড়া। উদাহরণ: { "name": "wrench", "mass": "1.3kg", "count": "3" }

sos2Constraints

map (key: string ( int64 format), value: object ( SosConstraintProto ))

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

"key": value জোড়া। উদাহরণ: { "name": "wrench", "mass": "1.3kg", "count": "3" }

indicatorConstraints

map (key: string ( int64 format), value: object ( IndicatorConstraintProto ))

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

"key": value জোড়া। উদাহরণ: { "name": "wrench", "mass": "1.3kg", "count": "3" }

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

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

JSON প্রতিনিধিত্ব
{
  "ids": [
    string
  ],
  "lowerBounds": [
    number
  ],
  "upperBounds": [
    number
  ],
  "integers": [
    boolean
  ],
  "names": [
    string
  ]
}
ক্ষেত্র
ids[]

string ( int64 format)

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

lowerBounds[]

number

# ভেরিয়েবলের সমান দৈর্ঘ্য, [-inf, inf-এ মান থাকতে হবে।

upperBounds[]

number

# ভেরিয়েবলের সমান দৈর্ঘ্য থাকা উচিত, (-inf, inf] এর মান।

integers[]

boolean

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

names[]

string

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

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

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

JSON প্রতিনিধিত্ব
{
  "maximize": boolean,
  "offset": number,
  "linearCoefficients": {
    object (SparseDoubleVectorProto)
  },
  "quadraticCoefficients": {
    object (SparseDoubleMatrixProto)
  },
  "name": string,
  "priority": string
}
ক্ষেত্র
maximize

boolean

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

offset

number

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

linearCoefficients

object ( SparseDoubleVectorProto )

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

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

quadraticCoefficients

object ( SparseDoubleMatrixProto )

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

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

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

name

string

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

priority

string ( int64 format)

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

SparseDoubleVectorProto

দ্বিগুণ ভেক্টরের একটি বিক্ষিপ্ত উপস্থাপনা।

JSON প্রতিনিধিত্ব
{
  "ids": [
    string
  ],
  "values": [
    number
  ]
}
ক্ষেত্র
ids[]

string ( int64 format)

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

values[]

number

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

SparseDoubleMatrixProto

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

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

JSON প্রতিনিধিত্ব
{
  "rowIds": [
    string
  ],
  "columnIds": [
    string
  ],
  "coefficients": [
    number
  ]
}
ক্ষেত্র
rowIds[]

string ( int64 format)

columnIds[]

string ( int64 format)

coefficients[]

number

NaN নাও থাকতে পারে।

Linear ConstraintsProto

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

JSON প্রতিনিধিত্ব
{
  "ids": [
    string
  ],
  "lowerBounds": [
    number
  ],
  "upperBounds": [
    number
  ],
  "names": [
    string
  ]
}
ক্ষেত্র
ids[]

string ( int64 format)

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

lowerBounds[]

number

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

upperBounds[]

number

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

names[]

string

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

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

Quadratic ConstraintProto

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

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

JSON প্রতিনিধিত্ব
{
  "linearTerms": {
    object (SparseDoubleVectorProto)
  },
  "quadraticTerms": {
    object (SparseDoubleMatrixProto)
  },
  "lowerBound": number,
  "upperBound": number,
  "name": string
}
ক্ষেত্র
linearTerms

object ( SparseDoubleVectorProto )

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

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

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

quadraticTerms

object ( SparseDoubleMatrixProto )

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

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

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

lowerBound

number

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

upperBound

number

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

name

string

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

SecondOrderConeConstraintProto

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

|| argumentsToNorm ||_2 <= upperBound ,

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

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

JSON প্রতিনিধিত্ব
{
  "upperBound": {
    object (LinearExpressionProto)
  },
  "argumentsToNorm": [
    {
      object (LinearExpressionProto)
    }
  ],
  "name": string
}
ক্ষেত্র
upperBound

object ( LinearExpressionProto )

argumentsToNorm[]

object ( LinearExpressionProto )

name

string

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

LinearExpressionProto

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

JSON প্রতিনিধিত্ব
{
  "ids": [
    string
  ],
  "coefficients": [
    number
  ],
  "offset": number
}
ক্ষেত্র
ids[]

string ( int64 format)

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

coefficients[]

number

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

offset

number

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

SosConstraintProto

একটি একক SOS1 বা SOS2 সীমাবদ্ধতা উপস্থাপনের জন্য ডেটা।

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

JSON প্রতিনিধিত্ব
{
  "expressions": [
    {
      object (LinearExpressionProto)
    }
  ],
  "weights": [
    number
  ],
  "name": string
}
ক্ষেত্র
expressions[]

object ( LinearExpressionProto )

SOS সীমাবদ্ধতা প্রয়োগ করার জন্য অভিব্যক্তি: * SOS1: সর্বাধিক একটি উপাদান একটি অশূন্য মান নেয়। * SOS2: সর্বাধিক দুটি উপাদান অশূন্য মান নেয়, এবং সেগুলি অবশ্যই পুনরাবৃত্তি ক্রমানুসারে সংলগ্ন হতে হবে।

weights[]

number

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

name

string

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

IndicatorConstraintProto

ফর্মের একটি একক সূচক সীমাবদ্ধতা উপস্থাপনের জন্য ডেটা: পরিবর্তনশীল(সূচক আইডি) = (অ্যাক্টিভেটঅনজিরো? 0 : 1) ⇒ নিম্নবাউন্ড <= অভিব্যক্তি <= উপরেরবাউন্ড।

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

JSON প্রতিনিধিত্ব
{
  "activateOnZero": boolean,
  "expression": {
    object (SparseDoubleVectorProto)
  },
  "lowerBound": number,
  "upperBound": number,
  "name": string,
  "indicatorId": string
}
ক্ষেত্র
activateOnZero

boolean

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

expression

object ( SparseDoubleVectorProto )

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

lowerBound

number

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

upperBound

number

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

name

string

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

indicatorId

string ( int64 format)

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

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

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

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

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

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

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

JSON প্রতিনিধিত্ব
{
  "timeLimit": string,
  "enableOutput": boolean,
  "lpAlgorithm": enum (LPAlgorithmProto),
  "presolve": enum (EmphasisProto),
  "cuts": enum (EmphasisProto),
  "heuristics": enum (EmphasisProto),
  "scaling": enum (EmphasisProto),
  "iterationLimit": string,
  "nodeLimit": string,
  "cutoffLimit": number,
  "objectiveLimit": number,
  "bestBoundLimit": number,
  "solutionLimit": integer,
  "threads": integer,
  "randomSeed": integer,
  "absoluteGapTolerance": number,
  "relativeGapTolerance": number,
  "solutionPoolSize": integer
}
ক্ষেত্র
timeLimit

string ( Duration format)

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

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

নয়টি পর্যন্ত ভগ্নাংশের সংখ্যা সহ সেকেন্ডে একটি সময়কাল, ' s ' দিয়ে শেষ হয়৷ উদাহরণ: "3.5s"

enableOutput

boolean

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

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

lpAlgorithm

enum ( LPAlgorithmProto )

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

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

presolve

enum ( EmphasisProto )

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

cuts

enum ( EmphasisProto )

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

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

heuristics

enum ( EmphasisProto )

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

scaling

enum ( EmphasisProto )

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

iterationLimit

string ( int64 format)

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

সাধারণত এলপি, কিউপি এবং এমআইপি সমাধানকারীদের দ্বারা সমর্থিত, তবে এমআইপি সমাধানকারীদের জন্য নোডলিমিটও দেখুন।

nodeLimit

string ( int64 format)

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

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

cutoffLimit

number

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

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

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

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

objectiveLimit

number

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

bestBoundLimit

number

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

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

solutionLimit

integer

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

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

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

threads

integer

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

randomSeed

integer

অন্তর্নিহিত সলভারে ছদ্ম-এলোমেলো নম্বর জেনারেটরের জন্য বীজ। মনে রাখবেন যে সমস্ত সমাধানকারীরা 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

number

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

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

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

এছাড়াও আপেক্ষিকGapTolerance দেখুন।

relativeGapTolerance

number

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

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

আপেক্ষিক GAP সর্বাধিক আপেক্ষিকGapTolerance (যখন সেট) হয়ে গেলে সমাধানকারীটি থামতে পারে এবং TERMINATION_REASON_OPTIMAL ফেরত দিতে পারে।

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

এছাড়াও absoluteGapTolerance দেখুন।

solutionPoolSize

integer

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

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 (SparseVectorFilterProto)
  },
  "dualValuesFilter": {
    object (SparseVectorFilterProto)
  },
  "reducedCostsFilter": {
    object (SparseVectorFilterProto)
  },
  "initialBasis": {
    object (BasisProto)
  },
  "solutionHints": [
    {
      object (SolutionHintProto)
    }
  ],
  "branchingPriorities": {
    object (SparseInt32VectorProto)
  }
}
ক্ষেত্র
variableValuesFilter

object ( SparseVectorFilterProto )

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

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

dualValuesFilter

object ( SparseVectorFilterProto )

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

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

reducedCostsFilter

object ( SparseVectorFilterProto )

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

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

initialBasis

object ( BasisProto )

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

solutionHints[]

object ( SolutionHintProto )

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

branchingPriorities

object ( SparseInt32VectorProto )

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

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

SparseVectorFilterProto

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

JSON প্রতিনিধিত্ব
{
  "skipZeroValues": boolean,
  "filterByIds": boolean,
  "filteredIds": [
    string
  ]
}
ক্ষেত্র
skipZeroValues

boolean

SparseBoolVectorProto এর জন্য "শূন্য" false

filterByIds

boolean

সত্য হলে, ফিল্টার করা আইডিতে তালিকাভুক্ত আইডিগুলির সাথে সংশ্লিষ্ট মানগুলিই ফেরত দিন।

filteredIds[]

string ( int64 format)

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 (SparseBasisStatusVector)
  },
  "variableStatus": {
    object (SparseBasisStatusVector)
  },
  "basicDualFeasibility": enum (SolutionStatusProto)
}
ক্ষেত্র
constraintStatus

object ( SparseBasisStatusVector )

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

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

variableStatus

object ( SparseBasisStatusVector )

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

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

basicDualFeasibility

enum ( SolutionStatusProto )

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

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

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

SparseBasisStatusVector

ভিত্তি অবস্থার একটি ভেক্টরের একটি বিক্ষিপ্ত উপস্থাপনা।

JSON প্রতিনিধিত্ব
{
  "ids": [
    string
  ],
  "values": [
    enum (BasisStatusProto)
  ]
}
ক্ষেত্র
ids[]

string ( int64 format)

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

values[]

enum ( BasisStatusProto )

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

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

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 (SparseDoubleVectorProto)
  },
  "dualValues": {
    object (SparseDoubleVectorProto)
  }
}
ক্ষেত্র
variableValues

object ( SparseDoubleVectorProto )

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

dualValues

object ( SparseDoubleVectorProto )

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

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

SparseInt32VectorProto

ints এর ভেক্টরের একটি বিক্ষিপ্ত উপস্থাপনা।

JSON প্রতিনিধিত্ব
{
  "ids": [
    string
  ],
  "values": [
    integer
  ]
}
ক্ষেত্র
ids[]

string ( int64 format)

সমস্ত উপাদান স্বতন্ত্র সহ (ক্রমবর্ধমান ক্রমানুসারে) সাজানো উচিত।

values[]

integer

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

SolveResultProto

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

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

JSON প্রতিনিধিত্ব
{
  "termination": {
    object (TerminationProto)
  },
  "solutions": [
    {
      object (SolutionProto)
    }
  ],
  "primalRays": [
    {
      object (PrimalRayProto)
    }
  ],
  "dualRays": [
    {
      object (DualRayProto)
    }
  ],
  "solveStats": {
    object (SolveStatsProto)
  }
}
ক্ষেত্র
termination

object ( TerminationProto )

কারণ সমাধানকারী বন্ধ.

solutions[]

object ( SolutionProto )

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

primalRays[]

object ( PrimalRayProto )

সীমাহীন প্রাথমিক উন্নতির দিকনির্দেশ, বা সমতুল্য, দ্বৈত অসম্ভাব্যতা শংসাপত্র। সাধারণত TerminationReasonProtos UNBOUNDED এবং DUAL_INFEASIBLE এর জন্য প্রদান করা হয়

dualRays[]

object ( DualRayProto )

সীমাহীন দ্বৈত উন্নতির দিকনির্দেশ, বা সমতুল্য, প্রাথমিক অসম্ভাব্যতা শংসাপত্র। সাধারণত TerminationReasonProto অসম্ভাব্য জন্য প্রদান করা হয়.

solveStats

object ( SolveStatsProto )

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

সমাপ্তি প্রোটো

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

JSON প্রতিনিধিত্ব
{
  "reason": enum (TerminationReasonProto),
  "limit": enum (LimitProto),
  "detail": string,
  "problemStatus": {
    object (ProblemStatusProto)
  },
  "objectiveBounds": {
    object (ObjectiveBoundsProto)
  }
}
ক্ষেত্র
reason

enum ( TerminationReasonProto )

TERMINATION_REASON_FEASIBLE বা TERMINATION_REASON_NO_SOLUTION_FOUND হলে অতিরিক্ত তথ্য limit মধ্যে, বিশদ বিবরণের জন্য limit দেখুন।

limit

enum ( LimitProto )

LIMIT_UNSPECIFIED যদি না কারণ TERMINATION_REASON_FEASIBLE বা TERMINATION_REASON_NO_SOLUTION_FOUND হয়৷ সমস্ত সমাধানকারী সর্বদা সীমা নির্ধারণ করতে পারে না যার কারণে সমাপ্তি ঘটে, LIMIT_UNDETERMINED ব্যবহার করা হয় যখন কারণ নির্ধারণ করা যায় না।

detail

string

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

problemStatus

object ( ProblemStatusProto )

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

objectiveBounds

object ( ObjectiveBoundsProto )

সর্বোত্তম উদ্দেশ্য মানের উপর সীমানা। 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 (FeasibilityStatusProto),
  "dualStatus": enum (FeasibilityStatusProto),
  "primalOrDualInfeasible": boolean
}
ক্ষেত্র
primalStatus

enum ( FeasibilityStatusProto )

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

dualStatus

enum ( FeasibilityStatusProto )

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

primalOrDualInfeasible

boolean

সত্য হলে, সমাধানকারী দাবি করে যে প্রাথমিক বা দ্বৈত সমস্যাটি অসম্ভাব্য, কিন্তু কোনটি (বা উভয়ই অসম্ভাব্য) তা জানে না। 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

number

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

dualBound

number

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

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

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

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

JSON প্রতিনিধিত্ব
{
  "primalSolution": {
    object (PrimalSolutionProto)
  },
  "dualSolution": {
    object (DualSolutionProto)
  },
  "basis": {
    object (BasisProto)
  }
}
ক্ষেত্র
primalSolution

object ( PrimalSolutionProto )

dualSolution

object ( DualSolutionProto )

basis

object ( BasisProto )

PrimalSolutionProto

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

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

JSON প্রতিনিধিত্ব
{
  "variableValues": {
    object (SparseDoubleVectorProto)
  },
  "objectiveValue": number,
  "auxiliaryObjectiveValues": {
    string: number,
    ...
  },
  "feasibilityStatus": enum (SolutionStatusProto)
}
ক্ষেত্র
variableValues

object ( SparseDoubleVectorProto )

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

objectiveValue

number

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

auxiliaryObjectiveValues

map (key: string ( int64 format), value: number)

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

"key": value জোড়া। উদাহরণ: { "name": "wrench", "mass": "1.3kg", "count": "3" }

feasibilityStatus

enum ( SolutionStatusProto )

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

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 (SparseDoubleVectorProto)
  },
  "reducedCosts": {
    object (SparseDoubleVectorProto)
  },
  "feasibilityStatus": enum (SolutionStatusProto),
  "objectiveValue": number
}
ক্ষেত্র
dualValues

object ( SparseDoubleVectorProto )

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

reducedCosts

object ( SparseDoubleVectorProto )

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

feasibilityStatus

enum ( SolutionStatusProto )

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

objectiveValue

number

PrimalRayProto

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

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

নীচের PrimalRay বার্তায়, পরিবর্তনশীল মান হল x।

JSON প্রতিনিধিত্ব
{
  "variableValues": {
    object (SparseDoubleVectorProto)
  }
}
ক্ষেত্র
variableValues

object ( SparseDoubleVectorProto )

প্রয়োজনীয়তা: * 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 (SparseDoubleVectorProto)
  },
  "reducedCosts": {
    object (SparseDoubleVectorProto)
  }
}
ক্ষেত্র
dualValues

object ( SparseDoubleVectorProto )

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

reducedCosts

object ( SparseDoubleVectorProto )

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

SolveStatsProto

JSON প্রতিনিধিত্ব
{
  "solveTime": string,
  "problemStatus": {
    object (ProblemStatusProto)
  },
  "simplexIterations": string,
  "barrierIterations": string,
  "firstOrderIterations": string,
  "nodeCount": string
}
ক্ষেত্র
solveTime

string ( Duration format)

math_opt দ্বারা পরিমাপ করা প্রাচীর ঘড়ির সময়, মোটামুটি Solver::Solve() এর ভিতরের সময়। দ্রষ্টব্য: এটি মডেল তৈরির কাজ অন্তর্ভুক্ত করে না।

নয়টি পর্যন্ত ভগ্নাংশের সংখ্যা সহ সেকেন্ডে একটি সময়কাল, ' s ' দিয়ে শেষ হয়৷ উদাহরণ: "3.5s"

problemStatus

object ( ProblemStatusProto )

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

simplexIterations

string ( int64 format)

barrierIterations

string ( int64 format)

firstOrderIterations

string ( int64 format)

nodeCount

string ( int64 format)