Indeks
BasisProto
(pesan)BasisStatusProto
(enum)DualRayProto
(pesan)DualSolutionProto
(pesan)EmphasisProto
(enum)FeasibilityStatusProto
(enum)IndicatorConstraintProto
(pesan)LPAlgorithmProto
(enum)LimitProto
(enum)LinearConstraintsProto
(pesan)LinearExpressionProto
(pesan)ModelProto
(pesan)ModelSolveParametersProto
(pesan)ObjectiveBoundsProto
(pesan)ObjectiveProto
(pesan)PrimalRayProto
(pesan)PrimalSolutionProto
(pesan)ProblemStatusProto
(pesan)QuadraticConstraintProto
(pesan)SecondOrderConeConstraintProto
(pesan)SolutionHintProto
(pesan)SolutionProto
(pesan)SolutionStatusProto
(enum)SolveParametersProto
(pesan)SolveResultProto
(pesan)SolveStatsProto
(pesan)SolverTypeProto
(enum)SosConstraintProto
(pesan)SparseBasisStatusVector
(pesan)SparseDoubleMatrixProto
(pesan)SparseDoubleVectorProto
(pesan)SparseInt32VectorProto
(pesan)SparseVectorFilterProto
(pesan)TerminationProto
(pesan)TerminationReasonProto
(enum)VariablesProto
(pesan)
BasisProto
Karakterisasi kombinatorial untuk solusi program linear.
Metode simpleks untuk menyelesaikan program linear selalu menampilkan "solusi dasar yang layak" yang dapat dijelaskan secara kombinasi oleh Basis. Dasar menetapkan BasisStatusProto untuk setiap variabel dan batasan linear.
Misalnya, pertimbangkan bentuk standar LP: min c * x s.t. A * x = b x >= 0 yang memiliki lebih banyak variabel daripada batasan dan dengan peringkat baris penuh A.
Misalkan n adalah jumlah variabel dan m jumlah batasan linear. Dasar yang valid untuk masalah ini dapat dibuat sebagai berikut: * Semua batasan akan memiliki status dasar FIXED. * Pilih variabel m sehingga kolom A bersifat independen secara linear dan tetapkan status BASIC. * Tetapkan status AT_LOWER untuk variabel n - m yang tersisa.
Solusi dasar untuk dasar ini adalah solusi unik dari A * x = b yang memiliki semua variabel dengan status AT_LOWER tetap berada di batas bawahnya (semua nol). Solusi yang dihasilkan disebut solusi layak dasar jika juga memenuhi x >= 0.
Kolom | |
---|---|
constraint_status |
Status dasar batasan. Persyaratan: * constraint_status.ids sama dengan LinearConstraints.ids. |
variable_status |
Status berbasis variabel. Persyaratan: * constraint_status.ids sama dengan VariablesProto.ids. |
basic_dual_feasibility |
Ini adalah fitur lanjutan yang digunakan oleh MathOpt untuk mengkarakterisasi kelayakan solusi LP yang kurang optimal (solusi yang optimal akan selalu memiliki status SOLUTION_STATUS_FEASIBLE). Untuk LP satu sisi, statusnya harus sama dengan status kelayakan solusi ganda yang terkait. Untuk LP dua sisi, hal ini mungkin berbeda dalam beberapa kasus ekstrem (misalnya penyelesaian yang tidak lengkap dengan simpleks primal). Jika Anda memberikan dasar awal melalui ModelSolveParametersProto.initial_basis, nilai ini akan diabaikan. Data ini hanya relevan untuk dasar yang ditampilkan oleh SolutionProto.basis. |
BasisStatusProto
Status variabel/batasan dalam basis LP.
Enum | |
---|---|
BASIS_STATUS_UNSPECIFIED |
Nilai Guard yang tidak mewakili status. |
BASIS_STATUS_FREE |
Variabel/batasan bebas (tidak memiliki batas yang terbatas). |
BASIS_STATUS_AT_LOWER_BOUND |
Variabel/batasan berada pada batas bawahnya (yang harus terbatas). |
BASIS_STATUS_AT_UPPER_BOUND |
Variabel/batasan berada di batas atasnya (yang harus terbatas). |
BASIS_STATUS_FIXED_VALUE |
Variabel/batasan memiliki batas bawah dan atas terbatas yang identik. |
BASIS_STATUS_BASIC |
Variabel/batasan bersifat dasar. |
DualRayProto
Arah peningkatan tak terbatas pada dual dari pengoptimalan, masalah; setara dengan sertifikat ketidaklayakan utama.
Misalnya, pertimbangkan pasangan program linear pasangan ganda primal: (Primal) (Dual) min c * x maks b * y s.t. A * x >= b s.t. y * A + r = c x >= 0 y, r >= 0. Sinar ganda adalah pasangan (y, r) yang memuaskan: b * y > 0 y * A + r = 0 y, r >= 0 Amati bahwa menambahkan kelipatan positif (y, r) ke solusi layak ganda mempertahankan kelayakan ganda dan meningkatkan objektif (membuktikan ganda tidak dibatasi). Sinar ganda juga membuktikan masalah utama tidak mungkin terjadi.
Pada pesan DualRay di bawah ini, y adalah dual_values dan r adalah kurangi_costs.
Kolom | |
---|---|
dual_values |
Persyaratan: * dual_values.ids adalah elemen LinearConstraints.ids. * dual_values.values harus berhingga. |
reduced_costs |
Persyaratan: * less_costs.ids adalah elemen VariablesProto.ids. * less_costs.values harus terbatas. |
DualSolutionProto
Solusi untuk masalah pengoptimalan ganda.
Misalnya, pertimbangkan pasangan program linear pasangan ganda primal: (Primal) (Dual) min c * x maks b * y s.t. A * x >= b s.t. y * A + r = c x >= 0 y, r >= 0. Solusi ganda adalah pasangan (y, r). Hal ini layak jika memenuhi batasan dari (Dual) di atas.
Pada pesan di bawah ini, y adalah dual_values, r adalah less_costs, dan b * y adalah nilai objektif.
Kolom | |
---|---|
dual_values |
Persyaratan: * dual_values.ids adalah elemen LinearConstraints.ids. * dual_values.values harus berhingga. |
reduced_costs |
Persyaratan: * less_costs.ids adalah elemen VariablesProto.ids. * less_costs.values harus terbatas. |
feasibility_status |
Status kelayakan solusi sesuai dengan pemecah masalah yang mendasarinya. |
objective_value |
|
EmphasisProto
Tingkat upaya yang diterapkan pada tugas opsional saat memecahkan (lihat SolveParametersProto untuk digunakan).
Penekanan digunakan untuk mengonfigurasi fitur pemecah sebagai berikut: * Jika pemecah masalah tidak mendukung fitur tersebut, hanya UNSPECIFIED yang akan selalu valid, setelan lainnya biasanya akan menjadi error argumen yang tidak valid (beberapa pemecah masalah juga dapat menerima NONAKTIF). * Jika resolver mendukung fitur: - Jika disetel ke UNSPECIFIED, default dasar akan digunakan. - Bila fitur tidak dapat dinonaktifkan, NONAKTIF akan menampilkan pesan error. - Jika fitur ini diaktifkan secara default, solusi default pemecah biasanya akan dipetakan ke MEDIUM. - Jika fitur tersebut didukung, LOW, MEDIUM, TINGGI, dan SANGAT TINGGI tidak akan pernah memberikan error, dan akan dipetakan ke hasil yang paling cocok.
Enum | |
---|---|
EMPHASIS_UNSPECIFIED |
|
EMPHASIS_OFF |
|
EMPHASIS_LOW |
|
EMPHASIS_MEDIUM |
|
EMPHASIS_HIGH |
|
EMPHASIS_VERY_HIGH |
FeasibilityStatusProto
Status kelayakan masalah seperti yang diklaim oleh pemecah masalah (pemecah masalah tidak diwajibkan untuk mengembalikan sertifikat klaim).
Enum | |
---|---|
FEASIBILITY_STATUS_UNSPECIFIED |
Nilai Guard yang tidak mewakili status. |
FEASIBILITY_STATUS_UNDETERMINED |
Pemecah soal tidak mengklaim status. |
FEASIBILITY_STATUS_FEASIBLE |
Pemecah soal mengklaim bahwa masalah tersebut layak. |
FEASIBILITY_STATUS_INFEASIBLE |
Pemecah soal mengklaim bahwa masalah itu tidak mungkin dilakukan. |
IndicatorConstraintProto
Data untuk mewakili batasan indikator tunggal dalam bentuk: Variable(indicator_id) = (activate_on_zero ? 0 : 1) Mendorong batas_bawah <= ekspresi <= batas_atas.
Jika variabel yang terlibat dalam batasan ini (baik indikator maupun yang muncul di expression
) dihapus, variabel tersebut akan diperlakukan seolah-olah disetel ke nol. Secara khusus, menghapus variabel indikator berarti bahwa batasan indikator akan hampa jika activate_on_zero
bernilai salah (false), dan bahwa batasan tersebut setara dengan batasan linear jika activate_on_zero
bernilai benar (true).
Kolom | |
---|---|
activate_on_zero |
Jika benar, maka jika variabel indikator mengambil nilai 0, batasan tersirat harus menampungnya. Sebaliknya, jika variabel indikator mengambil nilai 1, maka batasan tersirat harus dipertahankan. |
expression |
Harus berupa ekspresi linear yang valid terkait model yang memuatnya: * Semua kondisi yang dinyatakan di |
lower_bound |
Harus memiliki nilai di [-inf, inf); tidak boleh NaN. |
upper_bound |
Harus memiliki nilai di (-inf, inf]; tidak boleh NaN. |
name |
Pesan induk mungkin memiliki persyaratan keunikan di kolom ini; misalnya, lihat |
indicator_id |
ID yang sesuai dengan variabel biner, atau tidak ditetapkan. Jika tidak disetel, batasan indikator akan diabaikan. Jika ditetapkan, kita mengharuskan: * VariablesProto.integers[indicator_id] = true, * VariablesProto.lower_bounds[indicator_id] >= 0, * VariablesProto.upper_bounds[indicator_id] <= 1. Kondisi ini tidak divalidasi oleh MathOpt, tetapi jika tidak terpenuhi, pemecah soal akan menampilkan error saat menyelesaikan soal. |
LPAlgorithmProto
Memilih algoritma untuk menyelesaikan program linear.
Enum | |
---|---|
LP_ALGORITHM_UNSPECIFIED |
|
LP_ALGORITHM_PRIMAL_SIMPLEX |
Metode simplex (primal). Biasanya dapat memberikan solusi primal dan ganda, sinar primal/ganda pada soal primal/dual tak terbatas, dan suatu basis. |
LP_ALGORITHM_DUAL_SIMPLEX |
Metode simpleks ganda. Biasanya dapat memberikan solusi primal dan ganda, sinar primal/ganda pada soal primal/dual tak terbatas, dan suatu basis. |
LP_ALGORITHM_BARRIER |
Metode penghalang, juga biasa disebut metode titik interior (IPM). Biasanya dapat memberikan solusi primal dan ganda. Beberapa implementasi juga dapat menghasilkan sinar pada masalah yang tidak terbatas/tidak layak. Dasar tidak diberikan kecuali pemecah masalah yang mendasarinya melakukan "crossover" dan diselesaikan dengan simplex. |
LP_ALGORITHM_FIRST_ORDER |
Algoritma yang didasarkan pada metode urutan pertama. Ini biasanya akan menghasilkan solusi primal dan ganda, serta berpotensi juga sertifikat ketidaklayakan primal dan/atau ganda. Metode urutan pertama biasanya akan memberikan solusi dengan akurasi yang lebih rendah, sehingga pengguna harus berhati-hati dalam menetapkan parameter kualitas solusi (misalnya, toleransi) dan memvalidasi solusi. |
LimitProto
Saat Solve() berhenti lebih awal dengan termReasonProto FEASIBLE atau NO_SOLUTION_FOUND, batas spesifik yang tercapai.
Enum | |
---|---|
LIMIT_UNSPECIFIED |
Digunakan sebagai nilai null ketika kami menghentikan bukan dari batas (mis. TERMINATION_REASON_OPTIMAL). |
LIMIT_UNDETERMINED |
Pemecah masalah yang mendasari tidak mengekspos batas mana yang telah tercapai. |
LIMIT_ITERATION |
Algoritma berulang berhenti setelah melakukan jumlah maksimum iterasi (misalnya, simpleks atau iterasi penghalang). |
LIMIT_TIME |
Algoritma berhenti setelah waktu komputasi yang ditentukan pengguna. |
LIMIT_NODE |
Algoritma {i>bran-and-bound<i} berhenti karena telah mengeksplorasi jumlah maksimum {i>node<i} pada pohon {i>bran-and-bound<i}. |
LIMIT_SOLUTION |
Algoritma berhenti karena menemukan jumlah solusi yang diperlukan. Hal ini sering digunakan dalam MIP agar pemecah masalah mengembalikan solusi layak pertama yang ditemuinya. |
LIMIT_MEMORY |
Algoritma berhenti karena kehabisan memori. |
LIMIT_CUTOFF |
Pemecah masalah dijalankan dengan batas (misalnya SolveParameters.cutoff_limit sudah ditetapkan) pada objektif, yang menunjukkan bahwa pengguna tidak menginginkan solusi yang lebih buruk daripada batasnya, dan pemecah soal menyimpulkan tidak ada solusi yang setidaknya sebagus batasnya. Biasanya tidak ada informasi solusi lebih lanjut yang diberikan. |
LIMIT_OBJECTIVE |
Algoritma berhenti karena menemukan solusi atau batas yang lebih baik dari batas yang ditetapkan oleh pengguna (lihat SolveParameters.objective_limit dan SolveParameters.best_bound_limit). |
LIMIT_NORM |
Algoritma berhenti karena norma iterasi menjadi terlalu besar. |
LIMIT_INTERRUPTED |
Algoritma berhenti karena ada sinyal interupsi atau permintaan interupsi pengguna. |
LIMIT_SLOW_PROGRESS |
Algoritma berhenti karena tidak dapat terus membuat progres menuju solusi. |
LIMIT_OTHER |
Algoritma berhenti karena ada batas yang tidak dicakup oleh salah satu hal di atas. Perhatikan bahwa LIMIT_UNDETERMINED digunakan ketika alasan tidak dapat ditentukan, dan LIMIT_OTHER digunakan jika alasan tersebut diketahui tetapi tidak sesuai dengan salah satu alternatif di atas. PenghentianProto.detail mungkin berisi informasi tambahan tentang batas tersebut. |
LinearConstraintsProto
Seperti yang digunakan di bawah ini, kami mendefinisikan "#linear constraints" = size(LinearConstraintsProto.ids).
Kolom | |
---|---|
ids[] |
Harus tidak negatif dan meningkat secara ketat. Nilai max(int64) tidak dapat digunakan. |
lower_bounds[] |
Harus memiliki panjang yang sama dengan #linear batasan, nilai dalam [-inf, inf). |
upper_bounds[] |
Harus memiliki panjang yang sama dengan #linear batasan, nilai dalam (-inf, inf]. |
names[] |
Jika tidak disetel, semua string dianggap kosong. Jika tidak, harus memiliki panjang yang sama dengan batasan #linear. Semua nama yang tidak kosong harus berbeda. |
LinearExpressionProto
Representasi renggang dari ekspresi linear (jumlah variabel yang berbobot, ditambah offset konstan).
Kolom | |
---|---|
ids[] |
ID variabel. Harus disortir (dalam urutan meningkat) dengan semua elemen berbeda. |
coefficients[] |
Harus memiliki panjang yang sama dengan ID. Nilai harus terbatas tidak boleh NaN. |
offset |
Harus terbatas dan tidak boleh NaN. |
ModelProto
Masalah pengoptimalan. MathOpt mendukung: - Variabel keputusan kontinu dan bilangan bulat dengan batas terbatas opsional. - Tujuan linier dan kuadrat (tujuan tunggal atau beberapa), baik diminimalkan atau dimaksimalkan. - Sejumlah jenis batasan, termasuk: * Batasan linier * Batasan kuadrat * Batasan kerucut urutan kedua * Batasan logis > Batasan SOS1 dan SOS2 > Batasan indikator
Secara default, batasan ditampilkan dalam peta "id-to-data". Namun, kami mewakili batasan linear dalam format "struct-of-array" yang lebih efisien.
Kolom | |
---|---|
name |
|
variables |
|
objective |
Tujuan utama dalam model. |
auxiliary_objectives |
Tujuan tambahan untuk digunakan dalam model multi-tujuan. ID kunci peta harus dalam [0, max(int64)). Setiap prioritas, dan setiap nama yang tidak kosong, harus unik dan juga berbeda dari |
linear_constraints |
|
linear_constraint_matrix |
Koefisien variabel untuk batasan linear. Jika variabel yang terlibat dalam batasan ini dihapus, variabel tersebut akan diperlakukan seolah-olah telah disetel ke nol. Persyaratan: * linear_constraint_matrix.row_ids adalah elemen linear_constraints.ids. * linear_constraint_matrix.column_ids adalah elemen variables.ids. * Entri matriks yang tidak ditentukan adalah nol. * linear_constraint_matrix.values harus berhingga. |
quadratic_constraints |
Batasan kuadrat dalam model. |
second_order_cone_constraints |
Batasan kerucut urutan kedua dalam model. |
sos1_constraints |
Batasan SOS1 dalam model, yang membatasi paling banyak satu |
sos2_constraints |
Batasan SOS2 dalam model, yang membatasi bahwa maksimal dua entri |
indicator_constraints |
Batasan indikator dalam model, yang memberlakukannya, jika "variabel indikator" biner disetel ke satu, "batasan tersirat" harus disimpan. |
ModelSolveParametersProto
Kolom | |
---|---|
variable_values_filter |
Filter yang diterapkan ke semua penampung renggang yang ditampilkan dengan kunci variabel dalam PrimalSolutionProto dan PrimalRayProto (PrimalSolutionProto.variable_values, PrimalRayProto.variable_values). Persyaratan: * filters_ids adalah elemen VariablesProto.ids. |
dual_values_filter |
Filter yang diterapkan ke semua penampung renggang yang ditampilkan dengan kunci batasan linear di DualSolutionProto dan DualRay (DualSolutionProto.dual_values, DualRay.dual_values). Persyaratan: * filters_ids adalah elemen LinearConstraints.ids. |
reduced_costs_filter |
Filter yang diterapkan ke semua container sparse yang ditampilkan dan dikunci oleh variabel dalam DualSolutionProto dan DualRay (DualSolutionProto.reduced_costs, DualRay.Reduced_costs). Persyaratan: * filters_ids adalah elemen VariablesProto.ids. |
initial_basis |
Dasar awal opsional untuk pemecah masalah LP simpleks mulai warm. Jika disetel, nilai ini diharapkan valid menurut |
solution_hints[] |
Petunjuk solusi opsional. Jika pemecah masalah yang mendasarinya hanya menerima satu petunjuk, petunjuk pertama akan digunakan. |
branching_priorities |
Prioritas percabangan opsional. Variabel dengan nilai yang lebih tinggi akan memiliki cabang terlebih dahulu. Variabel yang prioritasnya tidak ditetapkan mendapatkan prioritas default pemecah (biasanya nol). Persyaratan: * branching_priorities.values harus terbatas. * branching_priorities.ids harus menjadi elemen VariablesProto.ids. |
ObjectiveBoundsProto
Batas pada nilai tujuan optimal.
Kolom | |
---|---|
primal_bound |
Solver mengklaim bahwa nilai optimal sama atau lebih baik (lebih kecil untuk minimalisasi dan lebih besar untuk maksimalisasi) daripada primal_bound hingga toleransi kelayakan dasar pemecah (lihat peringatan di bawah): * primal_bound kecil (+inf untuk minimalisasi dan -inf maksimalisasi) saat pemecah tidak mengklaim memiliki batasan tersebut. * primal_bound dapat lebih dekat dengan nilai optimal daripada tujuan dari solusi terbaik yang layak. Secara khusus, primal_bound mungkin tidak praktis meskipun tidak ada solusi layak primal yang ditampilkan. Peringatan: Klaim yang sesungguhnya adalah bahwa ada solusi utama yang: * layak secara numerik (yaitu layak hingga toleransi pemecah masalah), dan * memiliki nilai objektif primal_bound. Solusi yang layak secara numerik ini mungkin sedikit tidak layak, dalam hal ini primal_bound bisa benar-benar lebih baik daripada nilai yang optimal. Menerjemahkan toleransi kelayakan dasar ke toleransi pada primal_bound tidaklah mudah, terutama ketika toleransi kelayakan relatif besar (misalnya ketika dipecahkan dengan PDLP). |
dual_bound |
Solver mengklaim bahwa nilai optimal sama atau lebih buruk (lebih besar untuk minimalisasi dan lebih kecil untuk maksimalisasi) daripada dual_bound hingga toleransi kelayakan ganda (lihat peringatan di bawah): * dual_bound biasa saja (-inf untuk minimalisasi dan +inf maksimalisasi) saat pemecah masalah tidak mengklaim memiliki batasan tersebut. Demikian pula dengan primal_bound, hal ini dapat terjadi untuk beberapa pemecah masalah bahkan saat menampilkan hasil optimal. Pemecah MIP biasanya akan melaporkan batas meskipun tidak akurat. * untuk masalah berkelanjutan dual_bound bisa lebih dekat dengan nilai optimal daripada tujuan dari solusi ganda terbaik yang layak. Untuk MIP, salah satu nilai non-trivial pertama untuk dual_bound sering kali merupakan nilai relaksasi LP MIP yang optimal. * dual_bound harus lebih baik (lebih kecil untuk minimalisasi dan lebih besar untuk maksimal) daripada primal_bound hingga toleransi pemecah (lihat peringatan di bawah). Peringatan: * Untuk masalah berkelanjutan, klaim yang tepat adalah bahwa ada solusi ganda yang: * layak secara numerik (yaitu layak hingga toleransi pemecah masalah), dan * memiliki nilai objektif dual_bound. Solusi yang layak secara numerik ini mungkin sedikit tidak layak, dalam hal ini dual_bound bisa benar-benar lebih buruk daripada nilai optimal dan primal_bound. Serupa dengan kasus dasar, menerjemahkan toleransi kelayakan ganda ke toleransi pada dual_bound tidaklah mudah, khususnya ketika toleransi kelayakan relatif besar. Namun, beberapa pemecah masalah memberikan versi dual_bound yang telah dikoreksi yang secara numerik lebih aman. Versi yang dikoreksi ini dapat diakses melalui output khusus pemecah masalah (misalnya untuk PDLP, pdlp_output.convergence_information.corrected_dual_objective). * Untuk pemecah MIP, dual_bound mungkin dikaitkan dengan solusi ganda untuk beberapa relaksasi berkelanjutan (misalnya, relaksasi LP), tetapi sering kali merupakan konsekuensi kompleks dari eksekusi pemecah masalah dan biasanya lebih tidak akurat daripada batas yang dilaporkan oleh pemecah masalah LP. |
ObjectiveProto
Kolom | |
---|---|
maximize |
false adalah meminimalkan, true adalah memaksimalkan |
offset |
Harus terbatas dan bukan NaN. |
linear_coefficients |
Istilah ObjectiveProto yang linear dalam variabel keputusan. Persyaratan: * linear_coefficients.ids adalah elemen VariablesProto.ids. * VariablesProto yang tidak ditentukan berkaitan dengan nol. * linear_coefficients.values harus terbatas. * linear_coefficients.values bisa nol, tetapi ini hanya membuang-buang ruang. |
quadratic_coefficients |
Istilah objektif yang kuadrat dalam variabel keputusan. Persyaratan selain yang ada pada pesan SparseDoubleMatrixProto: * Setiap elemen quadratic_coefficients.row_ids dan setiap elemen quadratic_coefficients.column_ids harus menjadi elemen VariablesProto.ids. * Matriks harus berbentuk segitiga atas: untuk setiap i, quadratic_coefficients.row_ids[i] <= quadratic_coefficients.column_ids[i]. Catatan: * Istilah yang tidak disimpan secara eksplisit memiliki koefisien nol. * Elemen quadratic_coefficients.coefficients boleh nol, tetapi ini hanya akan membuang-buang ruang. |
name |
Pesan induk mungkin memiliki persyaratan keunikan pada kolom ini; misalnya, lihat ModelProto.objectives dan AuxiliaryObjectivesUpdatesProto.new_objectives. |
priority |
Untuk masalah multi-tujuan, prioritas tujuan ini relatif terhadap masalah lainnya (lebih rendah lebih penting). Nilai ini tidak boleh negatif. Selain itu, setiap prioritas objektif dalam model harus berbeda pada waktu penyelesaian. Kondisi ini tidak divalidasi di level proto, sehingga model mungkin untuk sementara memiliki tujuan dengan prioritas yang sama. |
PrimalRayProto
Arah peningkatan tak terbatas pada masalah pengoptimalan; setara dengan sertifikat ketidaklayakan untuk masalah pengoptimalan ganda.
Contoh: amati program linier sederhana: min c * x s.t. A * x >= b x >= 0 Sinar primal adalah x yang memenuhi: c * x < 0 A * x >= 0 x >= 0 Amati bahwa jika diberikan penyelesaian yang layak, hasil kelipatan positif dari sinar primal tersebut bernilai obyektif dan bernilai lebih baik. Sinar primal juga membuktikan masalah pengoptimalan ganda tidak mungkin terjadi.
Pada pesan PrimalRay di bawah ini, variabel_values adalah x.
Kolom | |
---|---|
variable_values |
Persyaratan: * variabel_values.ids adalah elemen VariablesProto.ids. * variabel_values.values harus berhingga. |
PrimalSolutionProto
Solusi untuk masalah pengoptimalan.
Misalnya, pertimbangkan program linear sederhana: min c * x s.t. A * x >= b x >= 0. Solusi utamanya adalah nilai penetapan ke x. Sangat memungkinkan jika memenuhi A * x >= b dan x >= 0 dari contoh di atas. Pada pesan PrimalSolutionProto di bawah ini, variabel_nilai adalah x dan objektif_value adalah c * x.
Kolom | |
---|---|
variable_values |
Persyaratan: * variabel_values.ids adalah elemen VariablesProto.ids. * variabel_values.values harus berhingga. |
objective_value |
Nilai objektif seperti yang dihitung oleh pemecah masalah yang mendasarinya. Tidak boleh tak terbatas atau NaN. |
auxiliary_objective_values |
Nilai objektif tambahan seperti yang dihitung oleh pemecah masalah yang mendasarinya. Kunci harus berupa ID tujuan tambahan yang valid. Nilai tidak boleh tak terbatas atau NaN. |
feasibility_status |
Status kelayakan solusi sesuai dengan pemecah masalah yang mendasarinya. |
ProblemStatusProto
Status kelayakan masalah utama dan masalah ganda (atau ganda dari relaksasi berkelanjutan) seperti yang diklaim oleh pemecah masalah. Pemecah masalah tidak perlu mengembalikan sertifikat untuk klaim (misalnya, pemecah masalah dapat mengklaim kelayakan dasar tanpa mengembalikan penyelesaian layak utama). Status gabungan ini memberikan deskripsi komprehensif mengenai klaim pemecah masalah tentang kelayakan dan tidak adanya batasan dari masalah yang dipecahkan. Misalnya,
- status layak untuk masalah primal dan ganda menunjukkan bahwa primal layak dan dibatasi dan kemungkinan memiliki solusi optimal (dijamin untuk masalah tanpa kendala non-linear).
- status primal layak dan status ganda tidak layak menunjukkan masalah primal tidak terbatas (yaitu memiliki solusi yang baik secara arbitrer).
Perhatikan bahwa status dua ketidaklayakan itu sendiri (yaitu disertai dengan status dasar yang tidak dapat ditentukan) tidak berarti masalah primal tidak terbatas karena kedua masalah tersebut bisa jadi tidak mungkin terjadi. Selain itu, meskipun status kelayakan primal dan ganda mungkin menyiratkan adanya solusi yang optimal, hal ini tidak menjamin bahwa pemecah masalah telah benar-benar menemukan solusi optimal tersebut.
Kolom | |
---|---|
primal_status |
Status untuk masalah utama. |
dual_status |
Status untuk masalah ganda (atau masalah ganda dari relaksasi berkelanjutan). |
primal_or_dual_infeasible |
Jika benar, pemecah masalah mengklaim bahwa masalah utama atau masalah ganda tidak mungkin terjadi, tetapi tidak tahu masalah yang mana (atau apakah keduanya tidak mungkin). Dapat menjadi true (benar) hanya jika primal_problem_status = dual_problem_status = kUnspecified. Informasi tambahan ini sering kali diperlukan saat pra-pemrosesan menentukan tidak ada solusi optimal untuk masalah (tetapi tidak dapat menentukan apakah masalah disebabkan oleh ketidaklayakan, ketidakterbatasan, atau keduanya). |
QuadraticConstraintProto
Batasan kuadrat tunggal dalam bentuk: lb <= sum{linear_terms} + sum{quadratic_terms} <= ub.
Jika variabel yang terlibat dalam batasan ini dihapus, variabel tersebut akan diperlakukan seolah-olah telah disetel ke nol.
Kolom | |
---|---|
linear_terms |
Istilah yang linier dalam variabel keputusan. Selain persyaratan pada pesan SparseDoubleVectorProto, kami mengharuskan bahwa: * linear_terms.ids adalah elemen VariablesProto.ids. * linear_terms.values harus terbatas dan bukan-NaN. Catatan: * ID variabel yang dihilangkan memiliki koefisien nol yang sesuai. * linear_terms.values bisa nol, tapi ini hanya membuang-buang ruang. |
quadratic_terms |
Istilah yang kuadrat dalam variabel keputusan. Selain persyaratan pada pesan SparseDoubleMatrixProto, kami mengharuskan bahwa: * Setiap elemen quadratic_terms.row_ids dan setiap elemen quadratic_terms.column_ids harus menjadi elemen VariablesProto.ids. * Matriks harus berbentuk segitiga atas: untuk setiap i, quadratic_terms.row_ids[i] <= quadratic_terms.column_ids[i]. Catatan: * Istilah yang tidak disimpan secara eksplisit memiliki koefisien nol. * Elemen quadratic_terms.coefficients bisa berupa nol, tetapi ini hanya akan membuang-buang ruang. |
lower_bound |
Harus memiliki nilai dalam [-inf, inf), dan lebih kecil dari atau sama dengan |
upper_bound |
Harus memiliki nilai dalam (-inf, inf], dan lebih besar dari atau sama dengan |
name |
Pesan induk mungkin memiliki persyaratan keunikan di kolom ini; misalnya, lihat ModelProto.quadratic_constraints dan QuadraticConstraintUpdatesProto.new_constraints. |
SecondOrderConeConstraintProto
Batasan kerucut urutan kedua tunggal dari bentuk:
||arguments_to_norm
||_2 <= upper_bound
,
dengan upper_bound
dan setiap elemen arguments_to_norm
adalah ekspresi linear.
Jika variabel yang terlibat dalam batasan ini dihapus, variabel tersebut akan diperlakukan seolah-olah telah disetel ke nol.
Kolom | |
---|---|
upper_bound |
|
arguments_to_norm[] |
|
name |
Pesan induk mungkin memiliki persyaratan keunikan di kolom ini; misalnya, lihat |
SolutionHintProto
Solusi awal yang disarankan untuk pemecah masalah.
Pemecah MIP umumnya hanya menginginkan informasi primal (variable_values
), sementara pemecah masalah LP menginginkan informasi primal dan ganda (dual_values
).
Banyak pemecah MIP dapat bekerja dengan: (1) solusi parsial yang tidak menentukan semua variabel atau (2) solusi yang tidak layak. Dalam kasus ini, pemecah masalah biasanya memecahkan sub-MIP untuk melengkapi/memperbaiki petunjuk.
Cara penggunaan petunjuk oleh pemecah masalah, jika ada, sangat bergantung pada pemecah, jenis permasalahan, dan algoritma yang digunakan. Cara yang paling dapat diandalkan untuk memastikan petunjuk Anda memiliki efek adalah dengan membaca log pemecah masalah yang mendasarinya dengan dan tanpa petunjuk.
Pemecah LP berbasis {i>simplex <i}biasanya lebih memilih basis awal untuk petunjuk solusi (mereka perlu melakukan crossover untuk mengubah petunjuk menjadi solusi dasar yang layak).
Kolom | |
---|---|
variable_values |
Kemungkinan penetapan nilai sebagian ke variabel primal masalah. Persyaratan bebas pemecah masalah untuk sub-pesan ini adalah: * variable_values.ids adalah elemen VariablesProto.ids. * variabel_values.values harus berhingga. |
dual_values |
Penetapan nilai (yang kemungkinan sebagian) ke batasan linear masalah. Persyaratan: * dual_values.ids adalah elemen LinearConstraintsProto.ids. * dual_values.values harus berhingga. |
SolutionProto
Apa yang dimasukkan dalam solusi tergantung pada jenis masalah dan pemecahnya. Pola umum saat ini adalah 1. Pemecah masalah MIP hanya menampilkan solusi utama. 2. Pemecah LP {i>simplex <i}sering menampilkan suatu basis serta solusi primal dan ganda yang terkait dengan basis ini. 3. Pemecah masalah berkelanjutan lainnya sering kali memberikan solusi primal dan ganda yang terhubung dalam bentuk yang bergantung pada pemecah masalah.
Persyaratan: * minimal satu kolom harus ditetapkan; solusi tidak boleh kosong.
Kolom | |
---|---|
primal_solution |
|
dual_solution |
|
basis |
SolutionStatusProto
Kelayakan solusi primal atau ganda seperti yang diklaim oleh pemecah masalah.
Enum | |
---|---|
SOLUTION_STATUS_UNSPECIFIED |
Nilai Guard yang tidak mewakili status. |
SOLUTION_STATUS_UNDETERMINED |
Pemecah soal tidak mengklaim status kelayakan. |
SOLUTION_STATUS_FEASIBLE |
Pemecah soal mengklaim bahwa solusi tersebut layak. |
SOLUTION_STATUS_INFEASIBLE |
Pemecah soal mengklaim bahwa solusinya tidak mungkin. |
SolveParametersProto
Parameter untuk mengontrol satu penyelesaian.
Berisi kedua parameter yang umum untuk semua pemecah masalah, misalnya time_limit, dan parameter untuk solver tertentu, misalnya gscip. Jika nilai ditetapkan di kolom umum dan khusus pemecah masalah, setelan khusus pemecah akan digunakan.
Parameter umum yang bersifat opsional dan tidak disetel atau enum dengan nilai yang tidak ditentukan menunjukkan bahwa default pemecah digunakan.
Parameter khusus pemecah untuk pemecah selain yang digunakan akan diabaikan.
Parameter yang bergantung pada model (misalnya, prioritas percabangan ditetapkan untuk setiap variabel) diteruskan di ModelSolveParametersProto.
Kolom | |
---|---|
time_limit |
Waktu maksimum yang harus dihabiskan pemecah masalah untuk soal (atau tak terbatas jika tidak ditetapkan). Nilai ini bukan batas yang pasti, waktu penyelesaian mungkin sedikit melebihi nilai ini. Parameter ini selalu diteruskan ke pemecah yang mendasarinya, pemecah default tidak digunakan. |
enable_output |
Memungkinkan pencetakan rekaman aktivitas implementasi pemecah. Lokasi trace tersebut bergantung pada pemecahnya. Untuk SCIP dan Gurobi, ini akan menjadi streaming output standar. Untuk Glop dan CP-SAT, ini akan LOG(INFO). Perhatikan bahwa jika pemecah masalah mendukung callback pesan dan pengguna mendaftarkan callback untuknya, nilai parameter ini akan diabaikan dan tidak ada pelacakan yang dicetak. |
lp_algorithm |
Algoritma untuk menyelesaikan program linear. Jika LP_ALGORITHM_UNSPECIFIED, gunakan algoritma default pemecah masalah. Untuk soal yang bukan program linear, tetapi pemrograman linear adalah subrutin, pemecah masalah dapat menggunakan nilai ini. Misalnya, pemecah MIP biasanya akan menggunakan ini hanya untuk pemecahan LP root (dan sebaliknya menggunakan dual simplex). |
presolve |
Upaya menyederhanakan masalah sebelum memulai algoritma utama, atau tingkat upaya default pemecah jika solarmora_UNSPECIFIED. |
cuts |
Upaya untuk mendapatkan pelonggaran LP yang lebih kuat (khusus MIP), atau tingkat upaya default pemecah jika solarmora_UNSPECIFIED. CATATAN: menonaktifkan pemotongan dapat mencegah callback memiliki kesempatan untuk menambahkan potongan di MIP_ potongan, perilaku ini adalah khusus pemecah. |
heuristics |
Upaya dalam menemukan solusi yang layak di luar yang ditemukan dalam prosedur penelusuran lengkap (khusus MIP), atau tingkat upaya default pemecah jika SELECTED_UNSPECIFIED. |
scaling |
Upaya dalam mengubah skala masalah untuk meningkatkan stabilitas numerik, atau tingkat upaya default pemecah jika solarmora_UNSPECIFIED. |
iteration_limit |
Membatasi iterasi dari algoritma yang mendasari (misalnya pivot simplex). Perilaku spesifik bergantung pada pemecah dan algoritme yang digunakan, tetapi sering kali dapat memberikan batas penyelesaian deterministik (konfigurasi lebih lanjut mungkin diperlukan, misalnya satu thread). Biasanya didukung oleh pemecah masalah LP, QP, dan MIP, tetapi untuk pemecah masalah MIP, lihat juga node_limit. |
node_limit |
Membatasi jumlah subsoal yang diselesaikan dalam penelusuran enumeratif (misalnya cabang dan terikat). Bagi banyak pemecah masalah, ini dapat digunakan untuk membatasi komputasi secara deterministik (konfigurasi lebih lanjut mungkin diperlukan, misalnya satu thread). Biasanya untuk pemecah MIP, lihat juga Iterasi_limit. |
cutoff_limit |
Pemecah masalah berhenti lebih awal jika dapat membuktikan bahwa tidak ada solusi utama yang setidaknya sebaik alternatif. Pada perhentian awal, pemecah masalah menampilkan alasan penghentian NO_SOLUTION_FOUND dan dengan batas CUTOFF sehingga tidak diperlukan untuk memberikan informasi solusi tambahan. Tidak memengaruhi nilai yang ditampilkan jika tidak ada perhentian awal. Sebaiknya gunakan toleransi jika Anda menginginkan solusi dengan tujuan yang sama persis dengan batas ditampilkan. Lihat panduan pengguna untuk detail selengkapnya dan perbandingan dengan best_bound_limit. |
objective_limit |
Pemecah masalah berhenti lebih awal segera setelah menemukan solusi yang setidaknya sebagus ini, dengan alasan penghentian MUDAH dan membatasi TUJUAN. |
best_bound_limit |
Pemecah soal berhenti lebih awal segera setelah membuktikan ikatan terbaik setidaknya sebagus ini, dengan alasan penghentian FEASIBLE atau NO_SOLUTION_FOUND dan membatasi TUJUAN. Lihat panduan pengguna untuk detail lebih lanjut dan perbandingan dengan cutoff_limit. |
solution_limit |
Pemecah masalah berhenti lebih awal setelah menemukan sekian banyak solusi yang layak ini, dengan alasan penghentian MUDAH dan membatasi SOLUSI. Harus lebih besar dari nol jika ditetapkan. Parameter ini sering digunakan untuk menghentikan pemecah masalah pada solusi pertama yang layak ditemukan. Perhatikan bahwa tidak ada jaminan terhadap nilai objektif untuk solusi yang ditampilkan. Solvers biasanya tidak akan mengembalikan lebih banyak solusi daripada batas solusi, tetapi ini tidak diberlakukan oleh MathOpt, lihat juga b/214041169. Saat ini didukung untuk Gurobi dan SCIP, serta hanya untuk CP-SAT dengan nilai 1. |
threads |
Jika ditetapkan, nilainya harus >= 1. |
random_seed |
Seed untuk generator angka pseudo-random dalam pemecah masalah yang mendasarinya. Perhatikan bahwa semua pemecah masalah menggunakan angka pseudo-random untuk memilih hal-hal seperti gangguan dalam algoritma LP, untuk aturan tie-break-up, dan untuk perbaikan heuristik. Memvariasikan ini dapat memberikan dampak yang signifikan terhadap perilaku pemecah masalah. Meskipun semua pemecah masalah memiliki konsep benih, perhatikan bahwa nilai yang valid bergantung pada pemecah yang sebenarnya. - Gurobi: [0:GRB_MAXINT] (yang pada Gurobi 9.0 adalah 2x10^9). - GSCIP: [0:2147483647] (yang adalah MAX_INT atau kint32max atau 2^31-1). - GLOP: [0:2147483647] (sama seperti di atas) Dalam semua kasus, pemecah akan menerima nilai yang sama dengan: MAX(0, MIN(MAX_VALID_VALUE_FOR_SOLVER, random_seed)). |
absolute_gap_tolerance |
Toleransi pengoptimalan absolut (terutama) untuk pemecah MIP. GAP absolut adalah nilai absolut dari perbedaan antara: * nilai objektif dari solusi terbaik yang memungkinkan, * ikatan ganda yang dihasilkan oleh penelusuran. Pemecah masalah dapat berhenti setelah GAP absolut mencapai batas absolut_gap_tolerance (saat ditetapkan), dan menampilkan TERMINATION_REASON_OPTIMAL. Harus >= 0 jika ditetapkan. Lihat juga relative_gap_tolerance. |
relative_gap_tolerance |
Toleransi pengoptimalan relatif (terutama) untuk pemecah MIP. GAP relatif adalah versi normalisasi dari GAP absolut (ditetapkan pada absolut_gap_tolerance), dengan normalisasi yang bergantung pada pemecah masalah, mis. GAP absolut dibagi dengan nilai objektif dari solusi terbaik yang mungkin ditemukan. Pemecah masalah dapat berhenti setelah GAP relatif mencapai tingkat relatif_gap_tolerance (saat ditetapkan), dan mengembalikan TERMINATION_REASON_OPTIMAL. Harus >= 0 jika ditetapkan. Lihat juga absolut_gap_tolerance. |
solution_pool_size |
Pertahankan hingga |
SolveResultProto
Kontrak ketika solusi/sinar primal/ganda bersifat kompleks, lihat penghentian_reasons.md untuk deskripsi lengkap.
Hingga kontrak yang tepat diselesaikan, lebih aman untuk memeriksa apakah ada solusi/cara yang tersedia daripada mengandalkan alasan penghentian.
Kolom | |
---|---|
termination |
Alasan pemecah masalah berhenti. |
solutions[] |
Kontrak umum untuk urutan solusi yang harus diterapkan oleh pemecah masalah di masa depan adalah mengurutkan berdasarkan: 1. Solusi dengan solusi primal yang layak, diurutkan berdasarkan objektif primal terbaik terlebih dahulu. 2. Solusi dengan solusi ganda yang layak, diurutkan berdasarkan objektif ganda terbaik (tujuan ganda yang tidak diketahui adalah yang terburuk) 3. Semua solusi yang tersisa dapat ditampilkan dalam urutan apa pun. |
primal_rays[] |
Petunjuk untuk peningkatan awal tanpa batas, atau yang setara dengan sertifikat ketidaklayakan ganda. Biasanya diberikan untuk PenghentianAlasanProtos UNBOUNDED dan DUAL_INFEASIBLE |
dual_rays[] |
Petunjuk peningkatan ganda tanpa batas, atau yang setara, sertifikat ketidaklayakan dasar. Biasanya diberikan untuk PenghentianAlasanProto TIDAK DAPAT DIERUSKAN. |
solve_stats |
Statistik tentang proses penyelesaian, misalnya waktu berjalan, iterasi. |
SolveStatsProto
Kolom | |
---|---|
solve_time |
Waktu jam dinding berlalu seperti yang diukur oleh learn_opt, kira-kira dari waktu dalam Solver::Solve(). Catatan: ini tidak termasuk pekerjaan yang dilakukan saat membangun model. |
problem_status |
Status kelayakan untuk masalah primal dan ganda. |
simplex_iterations |
|
barrier_iterations |
|
first_order_iterations |
|
node_count |
|
SolverTypeProto
Pemecah masalah yang didukung oleh MathOpt.
Enum | |
---|---|
SOLVER_TYPE_UNSPECIFIED |
|
SOLVER_TYPE_GSCIP |
Memecahkan masalah Constraint Integer Programs (SCIP) (pihak ketiga). Mendukung soal kuadrat bilangan bulat LP, MIP, dan non-cembung. Tidak ada data ganda untuk LP yang ditampilkan. Pilih GLOP untuk LP. |
SOLVER_TYPE_GUROBI |
Pemecah masalah Gurobi (pihak ketiga). Mendukung soal kuadrat bilangan bulat LP, MIP, dan non-cembung. Umumnya merupakan opsi tercepat, tetapi memiliki lisensi khusus. |
SOLVER_TYPE_GLOP |
Pemecah masalah Glop Google. Mendukung LP dengan metode simpleks primal dan ganda. |
SOLVER_TYPE_CP_SAT |
Solusi CP-SAT dari Google. Mendukung masalah di mana semua variabel berupa bilangan bulat dan dibatasi (atau tersirat setelah presolve). Dukungan eksperimental untuk menskalakan ulang dan membedakan masalah dengan variabel berkelanjutan. |
SOLVER_TYPE_PDLP |
Pemecah PDLP Google. Mendukung objektif kuadrat diagonal LP dan konveks. Menggunakan metode urutan pertama, bukan simpleks. Dapat memecahkan masalah yang sangat besar. |
SOLVER_TYPE_GLPK |
GNU Linear Programming Kit (GLPK) (pihak ketiga). Mendukung MIP dan LP. Thread-safety: GLPK menggunakan penyimpanan lokal thread untuk alokasi memori. Akibatnya, instance Solver harus dihancurkan di thread yang sama dengan yang dibuat. Jika tidak, GLPK akan error. Tampaknya dapat memanggil Solver::Solve() dari thread lain selain yang digunakan untuk membuat Solver, tetapi tidak didokumentasikan oleh GLPK dan harus dihindari. Ketika memecahkan LP dengan presolver, larutan (dan sinar tidak terikat) hanya dikembalikan jika solusi optimal telah ditemukan. Selain itu, tidak ada yang ditampilkan. Lihat halaman glpk-5.0/doc/glpk.pdf #40 yang tersedia dari glpk-5.0.tar.gz untuk detailnya. |
SOLVER_TYPE_OSQP |
Pemecah masalah Program Kuadrat Pemisahan Operator (OSQP) (pihak ketiga). Mendukung masalah berkelanjutan dengan batasan linear dan objektif linear atau kuadrat cembung. Menggunakan metode urutan pertama. |
SOLVER_TYPE_ECOS |
Embedded Conic Solver (ECOS) (pihak ketiga). Mendukung masalah LP dan SOCP. Menggunakan metode titik interior (barrier). |
SOLVER_TYPE_SCS |
Splitting Conic Solver (SCS) (pihak ketiga). Mendukung masalah LP dan SOCP. Menggunakan metode urutan pertama. |
SOLVER_TYPE_HIGHS |
HiGHS Solver (pihak ketiga). Mendukung masalah LP dan MIP (QP konveks tidak diimplementasikan). |
SOLVER_TYPE_SANTORINI |
Implementasi referensi MathOpt untuk pemecah MIP. Lambat/tidak direkomendasikan untuk produksi. Bukan pemecah masalah LP (tidak ada informasi ganda yang ditampilkan). |
SosConstraintProto
Data untuk merepresentasikan satu batasan SOS1 atau SOS2.
Jika variabel yang terlibat dalam batasan ini dihapus, variabel tersebut akan diperlakukan seolah-olah telah disetel ke nol.
Kolom | |
---|---|
expressions[] |
Ekspresi yang digunakan untuk menerapkan batasan SOS: * SOS1: Maksimal satu elemen berisi nilai selain nol. * SOS2: Paling banyak dua elemen mengambil nilai bukan nol, dan elemen tersebut harus berdekatan dalam pengurutan berulang. |
weights[] |
Kosong atau sama panjangnya dengan ekspresi. Jika kosong, bobot default adalah 1, 2, ... Jika ada, entri harus unik. |
name |
Pesan induk mungkin memiliki persyaratan keunikan pada kolom ini; misalnya, lihat ModelProto.sos1_constraints dan SosConstraintUpdatesProto.new_constraints. |
SparseBasisStatusVector
Representasi renggang dari vektor status dasar.
Kolom | |
---|---|
ids[] |
Harus disortir (dalam urutan meningkat) dengan semua elemen berbeda. |
values[] |
Harus memiliki panjang yang sama dengan ID. |
SparseDoubleMatrixProto
Representasi renggang dari matriks ganda.
Matriks disimpan sebagai tiga kali lipat ID baris, ID kolom, dan koefisien. Ketiga vektor ini harus memiliki panjang yang sama. Untuk semua i, tuple (row_ids[i], column_ids[i]) harus berbeda. Entri harus dalam urutan utama baris.
Kolom | |
---|---|
row_ids[] |
|
column_ids[] |
|
coefficients[] |
Mungkin tidak mengandung NaN. |
SparseDoubleVectorProto
Representasi renggang dari vektor ganda.
Kolom | |
---|---|
ids[] |
Harus disortir (dalam urutan meningkat) dengan semua elemen berbeda. |
values[] |
Harus memiliki panjang yang sama dengan ID. Mungkin tidak mengandung NaN. |
SparseInt32VectorProto
Representasi renggang dari vektor int.
Kolom | |
---|---|
ids[] |
Harus diurutkan (dalam urutan meningkat) dengan semua elemen berbeda. |
values[] |
Harus memiliki panjang yang sama dengan ID. |
SparseVectorFilterProto
Pesan ini memungkinkan untuk membuat kueri/menetapkan bagian tertentu dari SparseXxxxVector. Perilaku default-nya adalah tidak memfilter apa pun. Penggunaan yang umum adalah mengkueri sebagian solusi saja (hanya nilai bukan nol, dan/atau hanya satu set nilai variabel yang dipilih sendiri).
Kolom | |
---|---|
skip_zero_values |
Untuk SparseBoolVectorProto "nol" adalah |
filter_by_ids |
Jika true (benar), hanya tampilkan nilai yang sesuai dengan ID yang tercantum dalam filtering_ids. |
filtered_ids[] |
Daftar ID yang akan digunakan saat filter_by_ids bernilai benar (true). Harus kosong jika filter_by_ids bernilai salah (false). CATATAN: jika ini kosong, dan filter_by_ids benar, Anda mengatakan bahwa Anda tidak ingin informasi apa pun dalam hasil. |
TerminationProto
Semua informasi mengenai alasan panggilan ke Solve() dihentikan.
Kolom | |
---|---|
reason |
Informasi tambahan dalam |
limit |
LIMIT_UNSPECIFIED kecuali jika alasannya adalah TERMINATION_REASON_FEASIBLE atau TERMINATION_REASON_NO_SOLUTION_FOUND. Tidak semua pemecah masalah selalu dapat menentukan batas yang menyebabkan penghentian, LIMIT_UNDETERMINED digunakan ketika penyebabnya tidak dapat ditentukan. |
detail |
Informasi tambahan khusus pemecah masalah tentang penghentian. |
problem_status |
Status kelayakan untuk masalah primal dan ganda. Mulai 18 Juli 2023, pesan ini mungkin tidak akan ada. Jika tidak ada, problem_status dapat ditemukan di SolveResultProto.Solve_stats. |
objective_bounds |
Batas pada nilai tujuan optimal. Mulai 18 Juli 2023, pesan ini mungkin tidak akan ada. Jika tidak ada, destination_bounds.primal_bound dapat ditemukan di SolveResultProto.Solve.stats.best_primal_bound dan goals_bounds.dual_bound dapat ditemukan di SolveResultProto.resolve.stats.best_dual_bound |
TerminationReasonProto
Alasan panggilan ke Solve() dihentikan.
Enum | |
---|---|
TERMINATION_REASON_UNSPECIFIED |
|
TERMINATION_REASON_OPTIMAL |
Solusi yang optimal (hingga toleransi numerik) telah ditemukan. |
TERMINATION_REASON_INFEASIBLE |
Masalah utama tidak memiliki solusi yang layak. |
TERMINATION_REASON_UNBOUNDED |
Masalah primal layak dan solusi yang baik dapat ditemukan di sepanjang sinar primal. |
TERMINATION_REASON_INFEASIBLE_OR_UNBOUNDED |
Masalah utamanya tidak layak atau tidak terbatas. Detail lebih lanjut tentang status masalah mungkin tersedia di solve_stats.problem_status. Perhatikan bahwa status tanpa batas Gurobi mungkin dipetakan di sini. |
TERMINATION_REASON_IMPRECISE |
Masalah ini diselesaikan pada salah satu kriteria di atas (Optimal, Ineligibility, Unbounded, atau IneligibilityOrUnbounded), tetapi satu atau beberapa toleransi tidak terpenuhi. Terdapat beberapa solusi/sinar utama/ganda, tetapi hasilnya mungkin sedikit tidak mungkin, atau (jika masalahnya hampir optimal) mungkin merupakan celah antara tujuan solusi terbaik dan batas objektif terbaik. Pengguna masih dapat mengajukan kueri statistik solusi/sinar/solusi primal/ganda dan solusi, tetapi mereka bertanggung jawab untuk menangani ketidaktepatan numerik. |
TERMINATION_REASON_FEASIBLE |
Pengoptimal mencapai semacam batas dan solusi primal yang layak ditampilkan. Lihat SolveResultProto.limit_detail untuk deskripsi mendetail tentang jenis batas yang telah dicapai. |
TERMINATION_REASON_NO_SOLUTION_FOUND |
Pengoptimal mencapai semacam batas dan tidak menemukan solusi primal yang layak. Lihat SolveResultProto.limit_detail untuk deskripsi mendetail tentang jenis batas yang telah tercapai. |
TERMINATION_REASON_NUMERICAL_ERROR |
Algoritma berhenti karena mengalami error numerik yang tidak dapat dipulihkan. Informasi solusi tidak tersedia. |
TERMINATION_REASON_OTHER_ERROR |
Algoritma berhenti karena terjadi error yang tidak tercakup dalam salah satu status yang ditentukan di atas. Informasi solusi tidak tersedia. |
VariablesProto
Seperti yang digunakan di bawah ini, kami mendefinisikan "#variables" = size(VariablesProto.ids).
Kolom | |
---|---|
ids[] |
Harus tidak negatif dan meningkat secara ketat. Nilai max(int64) tidak dapat digunakan. |
lower_bounds[] |
Harus memiliki panjang yang sama dengan #variables, nilai dalam [-inf, inf). |
upper_bounds[] |
Harus memiliki panjang yang sama dengan #variables, nilai dalam (-inf, inf]. |
integers[] |
Harus memiliki panjang yang sama dengan #variable. Nilai salah untuk variabel kontinu dan benar untuk variabel bilangan bulat. |
names[] |
Jika tidak disetel, semua string dianggap kosong. Jika tidak, panjangnya harus sama dengan #variable. Semua nama yang tidak kosong harus berbeda. |