Package google.research.optimization.v1.mathopt

Dizin

BasisProto

Bir doğrusal programa ilişkin bir çözümün kombinasyonsal karakterizasyonu.

Doğrusal programların çözümü için kullanılan tek yöntem, her zaman bir Temel ile kombinasyon halinde açıklanabilen bir "temel uygulanabilir çözüm" döndürür. Bir temel, her değişken ve doğrusal kısıtlama için bir BasisStatusProto atar.

Örneğin, standart bir LP: min c * x s.t. A * x = b x >= 0 olan ve kısıtlamalardan daha fazla değişken içeren ve tam satır sıralaması A.

İzin verilen değişken sayısı, m doğrusal kısıt sayısı olsun. Bu problem için geçerli bir temel şu şekilde oluşturulabilir: * Tüm kısıtlamalar SFİXED temel durumuna sahip olacaktır. * A sütunları doğrusal olarak bağımsız olacak şekilde m değişken seçin ve durumunu TEMEL olarak atayın. * Kalan n - m değişkenleri için AT_LOWER durumunu atayın.

Bu temelin temel çözümü, AT_LOWER durumu alt sınırlarına (tümü sıfır) sabitlenmiş tüm değişkenleri içeren benzersiz A * x = b çözümüdür. Elde edilen çözüm, x >= 0 değerini de karşılıyorsa temel uygulanabilir çözüm olarak adlandırılır.

Alanlar
constraint_status

SparseBasisStatusVector

Kısıtlamaya dayalı durum.

Gereksinimler: * restricted_status.id, DoğrusalConstraints.id değerine eşittir.

variable_status

SparseBasisStatusVector

Değişken temel durumu.

Gereksinimler: * restricted_status.id, VariablesProto.id'ye eşittir.

basic_dual_feasibility

SolutionStatusProto

Bu, uygun olmayan LP çözümlerinin uygulanabilirliğini tanımlamak için MathOpt tarafından kullanılan gelişmiş bir özelliktir (optimum çözümler her zaman SOLUTION_STATUS_FEASIBLE durumunda olur).

Tek taraflı LP'ler için bu, ilişkili ikili çözümün uygulanabilirlik durumuna eşit olmalıdır. Çift taraflı LP'ler için bazı uç durumlarda farklı olabilir (ör. primal tek taraflı tamamlanmamış problemler).

ModelSolveParametersProto.initial_basis aracılığıyla bir başlangıç temeli sağlıyorsanız bu değer yoksayılır. Yalnızca SolutionProto.basis tarafından döndürülen temel için geçerlidir.

BasisStatusProto

Bir değişkenin/kısıtlamanın LP düzeyindeki durumu.

Sıralamalar
BASIS_STATUS_UNSPECIFIED Hiçbir durumu temsil etmeyen koruma değeri.
BASIS_STATUS_FREE Değişken/kısıtlama serbesttir (sonlu sınırları yoktur).
BASIS_STATUS_AT_LOWER_BOUND Değişken/sınırlama, alt sınırında (sonlu olmalıdır) var.
BASIS_STATUS_AT_UPPER_BOUND Değişken/sınırlama, üst sınırında (sonlu olmalıdır) var.
BASIS_STATUS_FIXED_VALUE Değişken/sınırlama aynı sonlu alt ve üst sınırlara sahip.
BASIS_STATUS_BASIC Değişken/sınırlama temeldir.

DualRayProto

Optimizasyonun iki katına ilişkin sınırsız bir iyileştirme yönü, problem; eşdeğer olarak, ilkel uygulanabilirlik sertifikası.

Örneğin, ilkel çiftli doğrusal program çiftini ele alalım: (Primal) (Çift) min c * x maks b * y s.t. A * x >= b s.t. y * A + r = c x >= 0 y, r >= 0. Çift Işın çifti (y, r) tatmin edicidir: b * y > 0 y * A + r = 0 y, r >= 0 Çift uygulanabilir çözüme (y, r) pozitif katını eklemenin ikili uygulanabilirliği koruduğunu ve hedefi iyileştirdiğini gözlemleyin (ikinin sınırlandırılmamış olduğunu kanıtlar). Çift nokta, ilkel sorunun uygulanabilir olmadığını da kanıtlıyor.

Aşağıdaki DualRay mesajında y dual_values, r ise azaltıldı_maliyettir.

Alanlar
dual_values

SparseDoubleVectorProto

Gereksinimler: * dual_values.id, LinearConstraints.id öğelerinin öğeleridir. * dual_values.values'ın tümü sonlu olmalıdır.

reduced_costs

SparseDoubleVectorProto

Gereksinimler: * down_costs.id, VariablesProto.id öğelerinin öğeleridir. * down_costs.values tüm sonlu olmalıdır.

DualSolutionProto

Optimizasyon problemlerinin ikili çözümüne yönelik bir çözüm.

Örneğin, ilkel çiftli doğrusal program çiftini ele alalım: (Primal) (Çift) min c * x maks b * y s.t. A * x >= b s.t. y * A + r = c x >= 0 y, r >= 0. İkili çözüm, çifttir (y, r). Yukarıdaki (İkili) kısıtlamalarını karşılıyorsa uygulanabilir.

Aşağıdaki mesajda y dual_value, r azaltılmış_maliyet, b * y ise nesnel_değerdir.

Alanlar
dual_values

SparseDoubleVectorProto

Gereksinimler: * dual_values.id, LinearConstraints.id öğelerinin öğeleridir. * dual_values.values'ın tümü sonlu olmalıdır.

reduced_costs

SparseDoubleVectorProto

Gereksinimler: * down_costs.id, VariablesProto.id öğelerinin öğeleridir. * down_costs.values tüm sonlu olmalıdır.

feasibility_status

SolutionStatusProto

Temel çözücüye göre çözümün uygulanabilirlik durumu.

objective_value

double

EmphasisProto

Çözme sırasında isteğe bağlı bir göreve uygulanan çaba düzeyi (kullanım için SolveParametersProto bölümüne bakın).

Vurgu, bir çözücü özelliğini şu şekilde yapılandırmak için kullanılır: * Bir çözücü bu özelliği desteklemiyorsa, her zaman yalnızca UNSPECIFIED (BELİRTİLMEMİŞ) değeri geçerli olur; diğer ayarlar genellikle geçersiz bağımsız değişken hatası oluşturur (bazı çözücüler KAPALI değerini de kabul edebilir). * Çözücü özelliği destekliyorsa: - BELİRTİLMEMİŞ olarak ayarlandığında temel varsayılan kullanılır. - Özellik kapatılamadığında, KAPALI bir hata döndürür. - Özellik varsayılan olarak etkinse çözücü varsayılanı genellikle MEDIUM ile eşlenir. - Özellik destekleniyorsa DÜŞÜK, ORTA, YÜKSEK ve ÇOK YÜKSEK, hiçbir zaman hata vermez ve en iyi eşleşmeyle eşleştirilir.

Sıralamalar
EMPHASIS_UNSPECIFIED
EMPHASIS_OFF
EMPHASIS_LOW
EMPHASIS_MEDIUM
EMPHASIS_HIGH
EMPHASIS_VERY_HIGH

FeasibilityStatusProto

Çözücü tarafından belirtilen problem uygulanabilirlik durumu (çözücünün, hak talebi için sertifika göndermesi gerekmez).

Sıralamalar
FEASIBILITY_STATUS_UNSPECIFIED Hiçbir durumu temsil etmeyen koruma değeri.
FEASIBILITY_STATUS_UNDETERMINED Çözücü, bir durum talebinde bulunmaz.
FEASIBILITY_STATUS_FEASIBLE Çözücü, sorunun uygulanabilir olduğunu iddia eder.
FEASIBILITY_STATUS_INFEASIBLE Çözücü, sorunun uygulanabilir olmadığını iddia eder.

IndicatorConstraintProto

Şu biçimde tek bir gösterge kısıtlamasını temsil eden veriler: Variable(indicator_id) = (activate_on_zero ? 0 : 1) ⇒ alt_sınır <= ifade <= üst_sınır.

Bu kısıtlamaya dahil olan bir değişken (gösterge veya expression özelliğinde görünen) silinirse sıfır olarak ayarlanmış gibi kabul edilir. Özellikle, gösterge değişkeninin silinmesi, activate_on_zero yanlışsa gösterge kısıtlamasının boş olacağı, activate_on_zero doğruysa doğrusal sınırlamaya eşdeğer olacağı anlamına gelir.

Alanlar
activate_on_zero

bool

Doğru ise, gösterge değişkeni 0 değerini alırsa ima edilen sınırlama geçerli olmalıdır. Aksi halde, gösterge değişkeni 1 değerini alırsa ima edilen sınırlamanın geçerli olması gerekir.

expression

SparseDoubleVectorProto

İçeren modelle ilgili olarak geçerli bir doğrusal ifade olmalıdır: * SparseDoubleVectorProto ile ilgili belirtilen tüm koşullar, * expression.values öğesinin tüm öğeleri sonlu olmalıdır, * expression.ids, VariablesProto.ids değerinin bir alt kümesidir.

lower_bound

double

[-inf, inf] değerine sahip olmalıdır; NaN olamaz.

upper_bound

double

(-inf, inf] değerine sahip olmalıdır; NaN olamaz.

name

string

Üst mesajların bu alanda benzersizlik gereksinimleri olabilir (ör. ModelProto.indicator_constraints ve IndicatorConstraintUpdatesProto.new_constraints).

indicator_id

int64

İkili değişkene karşılık gelen veya ayarlanmamış kimlik. Ayarlanmazsa gösterge kısıtlaması yok sayılır. Ayarlanırsa şunları gerekir: * VariablesProto.integers[indicator_id] = true, * VariablesProto.lower_bounds[indicator_id] >= 0, * VariablesProto.upper_bounds[gösterge_kimliği] <= 1. Bu koşullar MathOpt tarafından doğrulanmaz, ancak karşılanmazsa çözücü, çözme işleminden sonra hata döndürür.

LPAlgorithmProto

Doğrusal programları çözmek için bir algoritma seçer.

Sıralamalar
LP_ALGORITHM_UNSPECIFIED
LP_ALGORITHM_PRIMAL_SIMPLEX (primal) tek başına yöntem. Tipik olarak, ilkel ve çift çözüm, ilkel/çift sınırlı problemler için primal/çift ışınlar ve bir temel sağlayabilir.
LP_ALGORITHM_DUAL_SIMPLEX Çift tek yönlü yöntem. Tipik olarak, ilkel ve çift çözüm, ilkel/çift sınırlı problemler için primal/çift ışınlar ve bir temel sağlayabilir.
LP_ALGORITHM_BARRIER Yaygın olarak iç nokta yöntemi (IPM) olarak da adlandırılan bariyer yöntemidir. Genellikle hem asal hem de çift çözüm verebilir. Bazı uygulamalar, sınırsız/uygulanması mümkün olmayan sorunlara da neden olabilir. Temel çözücü "çapraz geçiş" yapıp tek işlemi bitirmediği sürece temel verilmez.
LP_ALGORITHM_FIRST_ORDER Birinci dereceden yönteme dayalı bir algoritma. Bunlar genellikle hem temel hem de ikili çözümler ve potansiyel olarak birincil ve/veya çift uygulanabilirlik sertifikaları üretir. Birinci dereceden yöntemler genellikle daha düşük doğrulukla çözümler sunar.Bu nedenle, kullanıcılar çözüm kalitesi parametrelerini (ör. toleranslar) ayarlamaya ve çözümleri doğrulamaya özen göstermelidir.

LimitProto

Bir Solve(), FesihReasonProto FEASIBLE veya NO_SOLUTION_FOUND ile erken durursa, ulaşılan belirli sınır.

Sıralamalar
LIMIT_UNSPECIFIED Bir sınırdan farklı şekilde sonlandırdığımızda boş değer olarak kullanılır (ör. TERMINATION_REASON_OPTIMAL).
LIMIT_UNDETERMINED Temel çözücü, hangi sınıra ulaşıldığını göstermez.
LIMIT_ITERATION Maksimum sayıda yineleme (ör. tek yönlü veya bariyer iterasyonları) gerçekleştirildikten sonra iterasyonlu bir algoritma durduruldu.
LIMIT_TIME Kullanıcı tarafından belirtilen hesaplama süresinden sonra algoritma durdu.
LIMIT_NODE Bir dal ve sınır algoritması, dal ve sınır ağacında maksimum sayıda düğüm keşfettiği için durduruldu.
LIMIT_SOLUTION Gerekli sayıda çözüm bulduğu için algoritma durduruldu. Bu özellik, genellikle çözücünün karşılaştığı ilk uygun çözümü döndürmesini sağlamak için MIP'lerde kullanılır.
LIMIT_MEMORY Bellek tükendiği için algoritma durduruldu.
LIMIT_CUTOFF Çözme aracı, hedef için bir kesim sınırı ile çalıştırıldı (ör.SolveParameters. cutoff_limit ayarı). Bu, kullanıcının kesim noktasından daha kötü bir çözüm istemediğini gösteriyor ve çözücü, en az kesim aralığı kadar iyi bir çözüm olmadığı sonucuna vardı. Genellikle daha fazla çözüm bilgisi verilmez.
LIMIT_OBJECTIVE Algoritma, kullanıcı tarafından belirlenen sınırdan daha iyi bir çözüm veya sınır bulduğu için durduruldu (SolveParameters.objective_limit ve SolveParameters.best_bound_limit).
LIMIT_NORM Yineleme normları çok fazla arttığı için algoritma durdu.
LIMIT_INTERRUPTED Kesme sinyali veya kullanıcı kesme isteği nedeniyle algoritma durduruldu.
LIMIT_SLOW_PROGRESS Algoritma, çözüme yönelik ilerleme kaydetmeye devam edemediği için çalışmayı durdurdu.
LIMIT_OTHER

Algoritma, yukarıdakilerden biri kapsamında olmayan bir sınır nedeniyle durduruldu. Neden belirlenemediğinde LIMIT_UNDETERMINED kullanılır. LIMIT_OTHER neden bilindiği halde yukarıdaki alternatiflerin hiçbirine uymuyorsa kullanılır.

FesihProto.detail, sınır hakkında ek bilgiler içerebilir.

LinearConstraintsProto

Aşağıda kullanıldığı gibi, "#doğrusal kısıtlamaları" = size(DoğrusalConstraintsProto.ids) tanımlarız.

Alanlar
ids[]

int64

Negatif olmamalı ve kesinlikle artmalıdır. max(int64) değeri kullanılamıyor.

lower_bounds[]

double

Uzunluk, #doğrusal kısıtlamalara ve [-inf, inf] cinsinden değerlere eşit olmalıdır.

upper_bounds[]

double

Uzunluk, #linear kısıtlamalarına eşit olmalıdır. Değerler (-inf, inf]).

names[]

string

Ayarlanmazsa tümünün boş dizeler olduğu varsayılır. Aksi takdirde uzunluğu, #linear kısıtlamalarına eşit olmalıdır.

Boş olmayan adların tümü farklı olmalıdır.

LinearExpressionProto

Doğrusal bir ifadenin seyrek temsili (değişkenlerin ağırlıklı toplamı artı sabit bir ofset).

Alanlar
ids[]

int64

Değişkenlerin kimlikleri. Tüm öğeler farklı olacak şekilde (artan düzende) sıralanmalıdır.

coefficients[]

double

Kimliklere eşit uzunlukta olmalıdır. Değerler sonlu olmalıdır, NaN olamaz.

offset

double

Sonlu olmalıdır ve NaN olamaz.

ModelProto

Optimizasyon sorunu. MathOpt şunları destekler: - İsteğe bağlı sonlu sınırlara sahip sürekli ve tam sayı karar değişkenleri. - Küçültülmüş veya en üst düzeye çıkarılmış doğrusal ve ikinci dereceden hedefler (tek veya birden çok hedef). - Aşağıdakileri de içeren çeşitli sınırlama türleri: * Doğrusal kısıtlamalar * İkinci dereceden kısıtlamalar * İkinci derece koni kısıtlamaları * Mantıksal kısıtlamalar > SOS1 ve SOS2 kısıtlamaları > Gösterge kısıtlamaları

Varsayılan olarak, kısıtlamalar "id-to-data" eşlemelerinde temsil edilir. Bununla birlikte, doğrusal kısıtlamaları daha verimli bir "dizi yapısı" biçiminde temsil ederiz.

Alanlar
name

string

variables

VariablesProto

objective

ObjectiveProto

Modeldeki birincil hedef.

auxiliary_objectives

map<int64, ObjectiveProto>

Çok amaçlı modellerde kullanıma yönelik yardımcı hedefler.

Eşleme anahtarı kimlikleri [0, max(int64)) arasında olmalıdır. Her öncelik ve boş olmayan her ad, benzersiz ve aynı zamanda birincil objective öğesinden farklı olmalıdır.

linear_constraints

LinearConstraintsProto

linear_constraint_matrix

SparseDoubleMatrixProto

Doğrusal kısıtlamalar için değişken katsayılar.

Bu kısıtlamaya dahil olan bir değişken silinirse sıfıra ayarlanmış gibi kabul edilir.

Gereksinimler: * linear_restrictiont_matrix.row_id, linear_restrictionts.id öğelerinin öğeleridir. * linear_restrictiont_matrix.column_id değerleri, değişkenler.kimliklerinin öğeleridir. * Belirtilmeyen matris girişleri sıfırdır. * linear_referrert_matrix.values değerlerinin tümü sonlu olmalıdır.

quadratic_constraints

map<int64, QuadraticConstraintProto>

Modeldeki ikinci dereceden kısıtlamalar.

second_order_cone_constraints

map<int64, SecondOrderConeConstraintProto>

Modeldeki ikinci derece koni kısıtlamaları.

sos1_constraints

map<int64, SosConstraintProto>

Modeldeki, en fazla bir expression değerinin sıfır olabileceğini sınırlayan SOS1 kısıtlamaları. İsteğe bağlı weights girişleri, daha hızlı bir şekilde yakınlaşmak amacıyla çözücü tarafından kullanılan uygulama ayrıntılarıdır. Daha ayrıntılı olarak açıklamak gerekirse çözücüler, "dengeli" alt düğümleri oluşturan dallara ayırma kararlarını seçmek için bu ağırlıkları kullanabilir (veya kullanmayabilir).

sos2_constraints

map<int64, SosConstraintProto>

Modeldeki SOS2 kısıtlamaları (en fazla iki expression girişinin sıfır olmayan bir sayı olabileceğini ve sıralamalarında bitişik olmaları gerekir). weights sağlanmazsa bu sıralama, öğelerin expressions listesindeki doğrusal sıralamasıdır. weights sunulursa sıralama, bu değerlere göre artan düzende alınır.

indicator_constraints

map<int64, IndicatorConstraintProto>

Modeldeki gösterge kısıtlamaları (ikili program "gösterge değişkeni" bir olarak ayarlanırsa "ima edilen sınırlama" geçerli olmalıdır).

ModelSolveParametersProto

Alanlar
variable_values_filter

SparseVectorFilterProto

PrimalSolutionProto ve PrimalRayProto (PrimalSolutionProto.variable_values, PrimalRayProto.variable_values) tarafından girilen tüm seyrek kapsayıcılara uygulanan filtre.

Gereksinimler: * filter_ids, VariablesProto.id öğelerinin öğeleridir.

dual_values_filter

SparseVectorFilterProto

DualSolutionProto ve DualRay'deki doğrusal kısıtlamalarla anahtarlanmış tüm döndürülen seyrek kapsayıcılara uygulanan filtre (DualSolutionProto.dual_values, DualRay.dual_values).

Gereksinimler: * filter_ids, LinearConstraints.id öğelerinin öğeleridir.

reduced_costs_filter

SparseVectorFilterProto

DualSolutionProto ve DualRay (DualSolutionProto.reduced_costs, DualRay.reduced_costs) değişkenler tarafından girilen tüm seyrek kapsayıcılara uygulanan filtre.

Gereksinimler: * filter_ids, VariablesProto.id öğelerinin öğeleridir.

initial_basis

BasisProto

Sıcak başlatılan tek LP çözücüler için isteğe bağlı başlangıç temeli. Ayarlanırsa mevcut ModelSummary için validators/solution_validator.h içindeki ValidateBasis uyarınca geçerli olması beklenir.

solution_hints[]

SolutionHintProto

İsteğe bağlı çözüm ipuçları. Temel çözücü yalnızca tek bir ipucunu kabul ediyorsa ilk ipucu kullanılır.

branching_priorities

SparseInt32VectorProto

İsteğe bağlı kollara ayırma öncelikleri. Daha yüksek değerlere sahip değişkenler ilk olarak kollara ayrılır. Öncelikleri ayarlanmayan değişkenler, çözücünün varsayılan önceliğini (genellikle sıfır) alır.

Gereksinimler: * Braing_priorities.values sonlu olmalıdır. * daling_priorities.id , VariablesProto.id öğelerinin öğeleri olmalıdır.

ObjectiveBoundsProto

Optimum hedef değerine göre sınırlanır.

Alanlar
primal_bound

double

Çözücü, optimum değerin, çözücülerin birincil fizibilite toleransına kadar primal_bound'a eşit veya daha iyi olduğunu (minimuma getirme için daha küçük ve maksimumlaştırma için daha büyük) iddia eder (aşağıdaki uyarıya bakın): * Prial_bound, çözücü bu bir sınıra sahip olduğunu iddia etmediğinde önemsizdir (küçültme için +inf ve -inf maksimizasyon). * primal_bound, optimum değere, en iyi ilkel çözümün hedefinden daha yakın olabilir. Özellikle, herhangi bir ilkel uygulanabilir çözüm döndürülmese bile primal_bound parametresi önemsiz olmayabilir. Uyarı: Tam iddia, şu şekilde bir temel çözüm olduğudur: * sayısal olarak uygulanabilir (yani çözücü toleransına kadar uygulanabilir) ve * objektif_bağlı bir değere sahiptir. Sayısal olarak uygulanabilir bu çözüm bir miktar uygulanabilirlikte olmayabilir. Bu durumda, primal_bound ile optimum değerden kesin olarak daha iyi olabilir. Özellikle de fizibilite toleransı nispeten büyük olduğunda (örneğin, PDLP ile çözerken), primal fizibilite toleransının primal_bound parametresindeki bir toleransa dönüştürülmesi çok önemlidir.

dual_bound

double

Çözücü, optimum değerin eşit veya daha kötü olduğunu (en aza indirme için daha büyük, maksimuma getirme için ise daha küçük) olduğunu iddia eder. Bu durum, primal_bound ile benzer bir şekilde, optimum duruma dönerken bile bazı çözücülerde gerçekleşebilir. MIP çözücüler, kesin olmayan bile olsa genellikle sınır rapor eder. * Sürekli problemlerde dual_bound, en iyi ikili çözümün hedefinden ideal değere daha yakın olabilir. MIP'de dual_bound için önemsiz olmayan ilk değerlerden biri genellikle MIP'nin LP gevşetmesinin optimum değeridir. * dual_bound, çözücü toleranslarına kadar primal_bound parametresinden daha iyi (küçültme için daha küçük ve maksimum için daha büyük) olmalıdır (aşağıdaki uyarıya bakın). Uyarı: * Sürekli problemler için tam iddia şu çift çözümlüdür: * sayısal olarak uygulanabilir (yani çözücü toleransına kadar uygundur) ve * dual_bound nesne değerine sahiptir. Sayısal açıdan uygulanabilir olan bu çözüm biraz uygulanamaz; bu durumda, dual_bound (dual_bound) değeri optimum değerden ve primal_bound değerinden kesin olarak daha kötü olabilir. İlkel duruma benzer şekilde, özellikle fizibilite toleransı nispeten büyük olduğunda, ikili fizibilite toleransının dual_bound üzerindeki toleransa dönüştürülmesi önemsiz değildir. Bununla birlikte, bazı çözücüler, dual_bound sürümünün sayısal olarak daha güvenli olabilecek düzeltilmiş bir sürümünü sunar. Bu düzeltilmiş sürüme çözücünün belirli çıkışı üzerinden erişilebilir (örneğin, PDLP için, pdlp_output.convergence_information.corrected_dual_objective). * MIP çözücüler için dual_bound, bir miktar sürekli gevşeme (ör. LP gevşemesi) için ikili çözümle ilişkilendirilebilir ancak genellikle çözücülerin yürütmesinin karmaşık bir sonucudur ve genellikle LP çözücülerin bildirdiği sınırlardan daha kesin değildir.

ObjectiveProto

Alanlar
maximize

bool

yanlış en aza indirmek, doğru en üst düzeye çıkarmaktır

offset

double

NaN değil sonlu olmalıdır.

linear_coefficients

SparseDoubleVectorProto

Karar değişkenlerinde doğrusal olan ObjectiveProto terimleri.

Gereksinimler: * linear_coefficiencys.id, VariablesProto.id öğelerinin öğeleridir. * VariablesProto belirtilmeyen sıfıra karşılık gelir. * Doğrusal_cosayısal.değerlerin tümü sonlu olmalıdır. * doğrusal_cosayısal.değerler sıfır olabilir ancak bu yalnızca alan israfına yol açar.

quadratic_coefficients

SparseDoubleMatrixProto

Karar değişkenlerinde ikinci dereceden olan nesnel terimler.

SparseDoubleMatrixProto mesajlarına ek şartlar: * İkinci dereceden_katsayılar.satır_kimlikleri ve ikinci dereceden_katsayılar.sütun_kimlikleri öğelerinin her biri VariablesProto.id öğelerinin bir öğesi olmalıdır. * Matris büyük üçgen olmalıdır: Her i için ikinci dereceden_katsayılar.satır_kimlikleri[i] <= ikinci dereceden_katsayılar.sütun_kimlikleri[i].

Notlar: * Açıkça depolanmayan terimlerin katsayısı sıfırdır. * İkinci dereceden_katsayılar.katsayılar sıfır olabilir. Ancak bu yalnızca yer israfına yol açar.

name

string

Üst mesajların bu alanda benzersizlik gereksinimleri olabilir. Örneğin, ModelProto.objectives ve AuxiliaryObjectivesUpdatesProto.new_objectives konularına bakın.

priority

int64

Çok amaçlı problemlerde bu hedefin diğerlerine göre önceliği (düşük olması daha önemlidir) daha önemlidir. Bu değer, negatif olmayan bir sayı olmalıdır. Ayrıca modeldeki her hedef öncelik, çözüm zamanında farklı olmalıdır. Bu koşul proto düzeyinde doğrulanmaz. Bu nedenle modellerin geçici olarak aynı önceliğe sahip hedefleri olabilir.

PrimalRayProto

Bir optimizasyon probleminde sınırsız iyileştirme yönü; eşdeğer olarak, optimizasyon probleminin ikilisinin uygulanabilirliğiyle ilgili bir sertifikadır.

Örneğin, basit bir doğrusal program düşünün: min c * x s.t. A * x >= b x >= 0 Bir primal ışın, c * x < 0 A * x >= 0 x >= 0 Uygulanabilir bir çözümle elde edilen pozitif ışınların pozitif bir katı olacak şekilde, ilkel ışınların pozitif ve uygulanabilir katını elde ettikleri gözlemleyin. İlk elden sonuç, ikili optimizasyon sorununun uygulanabilir olmadığını da kanıtlar.

Aşağıdaki PrimalRay mesajındavariable_values, x'tir.

Alanlar
variable_values

SparseDoubleVectorProto

Gereksinimler: * variable_values.id, VariablesProto.id öğelerinin öğeleridir. * variable_values.values parametresinin tümü sonlu olmalıdır.

PrimalSolutionProto

Bir optimizasyon problemine çözüm.

Örneğin, basit bir doğrusal program düşünün: min c * x s.t. A * x >= b x >= 0. Asal çözüm, x'e değer atamaktır. Yukarıdaki A * x >= b ve x >= 0 değerlerini karşılıyorsa uygulanabilir. Aşağıdaki PrimalSolutionProto mesajında değişken_değerleri x, hedef_değeri ise c * x şeklindedir.

Alanlar
variable_values

SparseDoubleVectorProto

Gereksinimler: * variable_values.id, VariablesProto.id öğelerinin öğeleridir. * variable_values.values parametresinin tümü sonlu olmalıdır.

objective_value

double

Temel çözücü tarafından hesaplanan nesnel değer. Sonsuz veya NaN olamaz.

auxiliary_objective_values

map<int64, double>

Temel çözücü tarafından hesaplanan yardımcı hedef değerleri. Anahtarlar geçerli yardımcı hedef kimlikleri olmalıdır. Değerler, sonsuz veya NaN olamaz.

feasibility_status

SolutionStatusProto

Temel çözücüye göre çözümün uygulanabilirlik durumu.

ProblemStatusProto

Çözücü tarafından iddia edilen asal problemin ve ikilisinin (veya sürekli gevşeme ikilisinin) uygulanabilirlik durumu. Çözücünün, iddia için bir sertifika döndürmesi gerekmez (ör. çözücü, ilk uygulanabilir çözüm döndürmeden ilkel fizibilite iddiasında bulunabilir). Bu birleşik durum, bir çözücünün çözülmüş sorunun uygulanabilirliği ve sınırsızlığı ile ilgili iddialarının kapsamlı bir açıklamasını sunar. Örneğin:

  • Asal ve çift problemler için uygun durumu, asal değerin uygulanabilir ve sınırlı olduğunu ve muhtemelen ideal bir çözüme sahip olduğunu (doğrusal olmayan kısıtlamalar olmayan problemler için garanti edilir) gösterir.
  • "İlkel uygulanabilirlik" ve "çift uygulanabilirlik" durumları, asal problemin sınırsız olduğunu (yani, rastgele iyi çözümlerin olduğunu) gösterir.

Tek başına çift uygulanabilirlik durumunun (yani belirsiz bir ilkel durum söz konusu olduğunda) ilkel sorunun sınırlı olmadığı anlamına gelmediğini, çünkü her iki problemin de uygulanabilirliğinin mümkün olmadığını unutmayın. Ayrıca, ilk ve çift uygulanabilir durumu, optimum bir çözümün var olduğunu ima edebilir, ancak çözücünün böyle bir optimum çözümü gerçekten bulduğunu garanti etmez.

Alanlar
primal_status

FeasibilityStatusProto

Asal problemin durumu.

dual_status

FeasibilityStatusProto

İkili problem (veya sürekli gevşeme ikilisi) için durum.

primal_or_dual_infeasible

bool

Doğru ise çözücü, asal veya ikili problemin uygulanabilir olmadığını iddia eder, ancak hangisinin (veya her ikisinin de uygulanabilir olmadığını) bilemez. Yalnızca primal_problem_status = dual_problem_status = kUndetermined olduğunda doğru olabilir. Ön işleme, sorun için optimum bir çözüm olmadığını belirlediğinde (ancak sorunun fizibilite, sınırlandırılmamışlık veya her ikisinden de kaynaklanıp kaynaklanmadığını belirleyemediğinde) genellikle bu ek bilgilere ihtiyaç vardır.

QuadraticConstraintProto

Şu biçimdeki tek ikinci dereceden kısıtlama: lb <= sum{linear_terms} + sum{quadratic_terms} <= ub.

Bu kısıtlamaya dahil olan bir değişken silinirse sıfıra ayarlanmış gibi kabul edilir.

Alanlar
linear_terms

SparseDoubleVectorProto

Karar değişkenlerinde doğrusal olan terimler.

SparseDoubleVectorProto mesajlarıyla ilgili şartlara ek olarak: * linear_terms.id değerleri, VariablesProto.id öğelerinin öğeleridir. * Doğrusal_terms.değerlerin tamamı sonlu olmalı ve NaN olmamalıdır.

Notlar: * Atlanan değişken kimliklerine karşılık gelen sıfır katsayısı bulunur. * Doğrusal_terms.değerler sıfır olabilir ancak bu yalnızca alan boşa harcanır.

quadratic_terms

SparseDoubleMatrixProto

Karar değişkenlerinde ikinci dereceden olan terimler.

SparseDoubleMatrixProto mesajlarıyla ilgili şartlara ek olarak: * quadratic_terms.row_id öğelerinin her bir öğesi ve quadratic_terms.column_id öğelerinin her bir öğesi VariablesProto.id öğelerinin bir öğesi olmalıdır. * Matris büyük üçgen olmalıdır: Her i için ikinci dereceden_terimler.satır_kimlikleri[i] <= ikinci dereceden_terimler.sütun_kimlikleri[i].

Notlar: * Açıkça depolanmayan terimlerin katsayısı sıfırdır. * İkinci dereceden_terimler.cosayısal unsurlar sıfır olabilir ancak bu yalnızca yer israfına yol açar.

lower_bound

double

[-inf, inf) değerinde ve en fazla upper_bound olmalıdır.

upper_bound

double

(-inf, inf] aralığında değere sahip olmalı ve lower_bound değerinden büyük veya bu değere eşit olmalıdır.

name

string

Üst mesajların bu alanda benzersizlik gereksinimleri olabilir.Örneğin, bkz. ModelProto.quadratic_lenir ve QuadraticConstraintUpdatesProto.new_restrictionts.

SecondOrderConeConstraintProto

Formun tek bir ikinci derece koni kısıtlaması:

||arguments_to_norm||_2 <= upper_bound,

Burada upper_bound ve her arguments_to_norm öğesi doğrusal ifadedir.

Bu kısıtlamaya dahil olan bir değişken silinirse sıfıra ayarlanmış gibi kabul edilir.

Alanlar
upper_bound

LinearExpressionProto

arguments_to_norm[]

LinearExpressionProto

name

string

Üst mesajların bu alanda benzersizlik gereksinimleri olabilir (ör. ModelProto.second_order_cone_constraints ve SecondOrderConeConstraintUpdatesProto.new_constraints).

SolutionHintProto

Çözücü için önerilen bir başlangıç çözümü.

MIP çözücüler genellikle yalnızca asal bilgi (variable_values) isterken LP çözücüler hem asal hem de çift bilgi (dual_values) ister.

Birçok MIP çözücü: (1) tüm değişkenleri belirtmeyen kısmi çözümler veya (2) uygun olmayan çözümlerle çalışabilir. Bu durumlarda çözücüler, ipucunu tamamlamak/düzeltmek için genellikle bir alt MIP çözer.

İpucunun çözücü tarafından kullanılma şekli, çözücüye, problemin türüne ve kullanılan algoritmaya büyük ölçüde bağlıdır. İpucunuzun etkili olduğundan emin olmanın en güvenilir yolu, ipucuyla veya ipucu olmadan alttaki çözücü günlüklerini okumaktır.

Simplex tabanlı LP çözücüler, genellikle çözüm ipucu yerine başlangıç temelini tercih eder (ipucuyu aksi takdirde basit ve uygulanabilir bir çözüme dönüştürmek için çapraz geçiş yapmaları gerekir).

Alanlar
variable_values

SparseDoubleVectorProto

Sorunun asal değişkenlerine muhtemelen kısmen değer atanması. Bu alt mesaj için çözücüden bağımsız gereksinimler şunlardır: * variable_values.ids, VariablesProto.id öğelerinin öğeleridir. * variable_values.values parametresinin tümü sonlu olmalıdır.

dual_values

SparseDoubleVectorProto

Değerlerin, problemin doğrusal kısıtlamalarına (potansiyel olarak kısmi) atanması.

Gereksinimler: * dual_values.id, LinearConstraintsProto.id öğelerinin öğeleridir. * dual_values.values'ın tümü sonlu olmalıdır.

SolutionProto

Bir çözüme nelerin dahil edileceği, problemin ve çözücünün türüne bağlıdır. Şu anki ortak kalıplar: 1. MIP çözücüler yalnızca asal çözüm döndürür. 2. Simplex LP çözücüler genellikle bir temel ve bu temelle ilişkili primal ve çift çözümleri sunar. 3. Diğer sürekli çözücüler genellikle çözücüye bağlı bir biçimde birbirine bağlı olan bir asal ve çift çözüm çözümü sunar.

Gereksinimler: * En az bir alan ayarlanmalıdır. Çözüm alanı boş bırakılamaz.

Alanlar
primal_solution

PrimalSolutionProto

dual_solution

DualSolutionProto

basis

BasisProto

SolutionStatusProto

Çözücü tarafından talep edilen asal veya çift çözümün uygulanabilirliği.

Sıralamalar
SOLUTION_STATUS_UNSPECIFIED Hiçbir durumu temsil etmeyen koruma değeri.
SOLUTION_STATUS_UNDETERMINED Çözücü, bir uygulanabilirlik durumu iddia etmez.
SOLUTION_STATUS_FEASIBLE Çözücü, çözümün uygulanabilir olduğunu iddia eder.
SOLUTION_STATUS_INFEASIBLE Çözücü, çözümün uygulanabilir olmadığını iddia eder.

SolveParametersProto

Tek bir çözümü kontrol edecek parametreler.

Tüm çözücülerde yaygın olarak kullanılan parametreleri (ör. zaman_sınırı) ve belirli bir çözücünün parametrelerini (ör. gscip) içerir. Hem ortak alanda hem de çözücüye özel alanda bir değer ayarlanırsa çözücüye özel ayar kullanılır.

İsteğe bağlı ve ayarlanmamış olan ortak parametreler veya değeri belirtilmemiş bir numaralandırma, çözücü varsayılanının kullanıldığını gösterir.

Kullanımda olanın dışındaki çözücülerin çözücüye özel parametreleri yoksayılır.

Modele bağlı olan parametreler (ör. kollara ayırma önceliği her değişken için ayarlanır) ModelSolveParametersProto'da iletilir.

Alanlar
time_limit

Duration

Bir çözücünün sorun için harcayacağı maksimum süre (ayarlanmamışsa sonsuzdur).

Bu değer kesin bir sınır değildir. Çözüm süresi bu değeri biraz aşabilir. Bu parametre her zaman temel çözücüye iletilir. Çözücü varsayılanı kullanılmaz.

enable_output

bool

Çözücü uygulama izlerinin yazdırılmasını etkinleştirir. Bu izlerin konumu çözücüye bağlıdır. SCIP ve Gurobi için bu, standart çıkış akışlarıdır. Glop ve CP-SAT için bu, LOG(INFO) olacaktır.

Çözücü, ileti geri çağırma işlevini destekliyorsa ve kullanıcı bunun için bir geri arama kaydederse bu parametre değerinin yok sayılacağını ve hiçbir iz yazdırılmayacağını unutmayın.

lp_algorithm

LPAlgorithmProto

Doğrusal program çözme algoritması. LP_ALGORITHM_UNSPECIFIED ise çözücü varsayılan algoritmasını kullanın.

Doğrusal programlar olmayan ancak doğrusal programlamanın bir alt rutin olduğu problemler için çözücüler bu değeri kullanabilir. Örneğin, MIP çözücüler genellikle bunu yalnızca kök LP çözümü için kullanır (aksi takdirde ikili tekli çözüm kullanır).

presolve

EmphasisProto

Ana algoritmaya başlamadan önce problemi basitleştirmeye çalışın veya EMPHASIS_UNSPECIFIED ise çözücü varsayılan çalışma düzeyini belirleyin.

cuts

EmphasisProto

Daha güçlü bir LP gevşemesi için çaba gösterin (yalnızca MIP) veya EMPHASIS_UNSPECIFIED ise çözücü varsayılan çaba düzeyi.

NOT: Kesme işlemlerini devre dışı bırakmak, geri çağırma işlevinin MIP_NODE üzerinde kesim ekleme imkanı olmasını önleyebilir. Bu davranış çözücüye özeldir.

heuristics

EmphasisProto

Tüm arama prosedüründe (yalnızca MIP) karşılaşılan çözümlerin ötesinde uygulanabilir çözümleri bulmaya çalışın veya EMPHASIS_UNSPECIFIED ise, çözücü varsayılan çaba düzeyini bulun.

scaling

EmphasisProto

Sayısal kararlılığı iyileştirmek için problemi yeniden ölçeklendirmeye çalışın ya da EMPHASIS_UNSPECIFIED ise problem çözücü varsayılan çaba düzeyini belirleyin.

iteration_limit

int64

Temel algoritmanın iterasyonlarıyla ilgili sınır (ör. tek yönlü özetler). Spesifik davranış, kullanılan çözücüye ve algoritmaya bağlıdır ancak genellikle belirleyici bir çözüm sınırı da verebilir (daha fazla yapılandırma gerekebilir, ör. tek iş parçacığı).

Genellikle LP, QP ve MIP çözücüler tarafından desteklenir ancak MIP çözücüler için ayrıca node_limit adresini de inceleyin.

node_limit

int64

Numaralandırmalı aramada çözülen alt problemlerin sayısını sınırlama (ör. dal ve sınır). Birçok çözücüde, hesaplamayı belirleyici bir şekilde sınırlandırmak için kullanılabilir (daha fazla yapılandırma gerekebilir, ör. tek iş parçacığı).

MIP çözücüler için genellikle iteration_limit parametresine de bakın.

cutoff_limit

double

Çözücü, en azından kesim değeri kadar iyi bir asal çözüm olmadığını kanıtlayabilirse erken durur.

Erken aşamalarda çözücü, sonlandırma nedeni NO_SOLUTION_FOUND ile sınırlıdır ve CUTOFF değerini döndürür ve ekstra çözüm bilgisi vermesi gerekmez. Erken durdurma yoksa döndürülen değeri etkilemez.

Hedefi tam olarak kesim noktasına eşit olan çözümlerin döndürülmesini istiyorsanız bir tolerans değeri kullanmanız önerilir.

Daha fazla ayrıntı ve best_bound_limit ile ilgili bir karşılaştırma için kullanıcı rehberine bakın.

objective_limit

double

Çözücü, en azından bu kadar iyi bir çözüm bulur bulmaz erken durur. Fesih nedeni FEASIBLE olur ve OBJECTIVE'ı sınırlandırır.

best_bound_limit

double

Çözücü, en iyi sınırın en azından bunun iyi düzeyde olduğunu kanıtlarsa erken durur. Fesih nedeni FEASIBLE veya NO_SOLUTION_FOUND ile ve OBJECTIVE ile sınırlandırılır.

Daha fazla ayrıntı ve kesim_limit ile ilgili bir karşılaştırma için kullanıcı rehberine bakın.

solution_limit

int32

Çözücü, bu sayıda uygulanabilir çözüm bulduktan sonra erken durur. Sonlandırma nedeni FEASIBLE ve SOLUTION'ı sınırlandırır. Ayarlanırsa sıfırdan büyük olmalıdır. Çoğunlukla çözücünün bulunan ilk uygun çözüm üzerinde durmasını sağlamak için kullanılır. Döndürülen çözümlerin hiçbirinin nesnel değeriyle ilgili bir garanti olmadığını unutmayın.

Çözücüler genellikle çözüm sınırından daha fazla çözüm döndürmezler ancak bu, MathOpt tarafından zorunlu kılınmaz. Ayrıca, b/214041169'a bakın.

Şu anda Gurobi ve SCIP için ve yalnızca 1 değerine sahip CP-SAT için desteklenmektedir.

threads

int32

Ayarlanırsa >= 1 olmalıdır.

random_seed

int32

Temel çözücüdeki sözde rastgele sayı oluşturucunun başlangıç noktası. Tüm çözücüler, LP algoritmasında pertürbasyon, eşitleme kuralları ve sezgisel düzeltmeler gibi şeyleri seçmek için sözde rastgele sayılar kullanır. Bunu değiştirmek, çözücü davranışı üzerinde önemli bir etki yaratabilir.

Tüm çözücülerin tohum kavramı vardır ancak geçerli değerler, gerçek çözücüye bağlıdır. - Gurobi: [0:GRB_MAXINT] (Gurobi 9.0 için 2x10^9). - GSCIP: [0:2147483647] (MAX_INT veya kint32max veya 2^31-1). - GLOP: [0:2147483647] (yukarıdakiyle aynı) Her durumda, çözücü şuna eşit bir değer alır: MAX(0, MIN(MAX_VALID_VALUE_FOR_SOLVER, rastgele_seed)).

absolute_gap_tolerance

double

MIP çözücüler için (esasen) mutlak optimumlik toleransı.

Mutlak GAP, arasındaki farkın mutlak değeridir: * bulunan en uygun çözümün nesnel değeri, * arama tarafından üretilen çift sınır. Mutlak GAP en fazla absolute_gap_tolerance (ayarlandığında) olduğunda çözücü durabilir ve TERMINATION_REASON_OPTIMAL değerini döndürebilir.

Ayarlanmışsa >= 0 olmalıdır.

Ayrıca bkz. göreceli_gap_tolerans.

relative_gap_tolerance

double

MIP çözücüler için göreceli optimumlik toleransı (esasen).

Göreli GAP, mutlak GAP'nin normalleştirilmiş bir sürümüdür (mutlak_gap_tolerans ile tanımlanır). Burada normalleştirme, çözücüye bağlıdır (ör. mutlak GAP'nin, bulunan en iyi çözümün nesnel değerine bölünmesiyle elde edilir).

Göreceli GAP en fazla göreli_gap_tolerans değerine (ayarlandığında) olduğunda çözücü durabilir ve TERMINATION_REASON_OPTIMAL değerini döndürebilir.

Ayarlanmışsa >= 0 olmalıdır.

Ayrıca absolute_gap_tolerance konusuna da bakın.

solution_pool_size

int32

Arama yaparken solution_pool_size adede kadar çözüm sağlayın. Çözüm havuzunun genellikle iki işlevi vardır: (1) Birden fazla çözüm döndürebilen çözücüler için bu, döndürülecek çözüm sayısını sınırlar. (2) Bazı çözücüler, çözüm havuzundaki çözümleri kullanarak buluşsal yöntemler çalıştırabilir. Bu nedenle, bu değerin değiştirilmesi algoritmanın yolunu etkileyebilir. Çözücüyü çözüm havuzunu doldurmaya zorlamak için (ör. n en iyi çözümle) daha fazla, çözücüye özel yapılandırma gerekir.

SolveResultProto

İlkel/çift çözüm/ışınların karmaşık olduğu durumlar için tam açıklama için sonlandırma_reasons.md sayfasını inceleyin.

Kesin bir sözleşme imzalanana kadar, fesih nedenine bel bağlamak yerine bir çözüm/tehlike olup olmadığını kontrol etmek en güvenlisidir.

Alanlar
termination

TerminationProto

Çözücünün durma nedeni.

solutions[]

SolutionProto

Gelecekteki çözücülerin uygulaması gereken çözümlerin sırası için genel sözleşme şu ölçüte göre sıralanır: 1. En iyi ilkel hedefe göre sıralanan ve ilk uygulanabilir çözüm içeren çözümler. 2. En iyi ikili hedefe (bilinmeyen ikili hedef en kötüsü) göre sıralanan ve ikili uygulanabilir çözüme sahip çözümler 3. Kalan tüm çözümler herhangi bir sırayla döndürülebilir.

primal_rays[]

PrimalRayProto

Sınırsız temel iyileştirme veya eşdeğer olarak çift uygulanabilirlik sertifikasıyla ilgili talimatlar. Tipik olarak FesihREASONProtos UNBOUNDED ve DUAL_INFEASIBLE için sağlanır

dual_rays[]

DualRayProto

Sınırsız ikili iyileştirme veya eşdeğer olarak asal fizibilite sertifikaları ile ilgili talimatlar. Tipik olarak FesihNedeniProto için sağlanır.

solve_stats

SolveStatsProto

Çözme süreciyle ilgili istatistikler, ör. çalıştırma süresi, yinelemeler.

SolveStatsProto

Alanlar
solve_time

Duration

matematik_opt tarafından ölçülen gerçek süre (yaklaşık olarak Solver::Solve()). Not: Buna, modeli oluştururken yapılan çalışmalar dahil değildir.

problem_status

ProblemStatusProto

Temel ve ikili problemlerin uygulanabilirlik durumları.

simplex_iterations

int64

barrier_iterations

int64

first_order_iterations

int64

node_count

int64

SolverTypeProto

MathOpt tarafından desteklenen çözücüler.

Sıralamalar
SOLVER_TYPE_UNSPECIFIED
SOLVER_TYPE_GSCIP

Kısıtlama Tam Sayı Programları (SCIP) çözücü (üçüncü taraf) çözme.

LP, MIP ve konveks olmayan tam sayı problemlerini destekler. Ancak açılış sayfaları için ikili veri döndürülmez. LP'ler için GLOP'u tercih ediyorum.

SOLVER_TYPE_GUROBI

Gurobi çözücü (üçüncü taraf).

LP, MIP ve konveks olmayan tam sayı problemlerini destekler. Genellikle en hızlı seçenektir, ancak özel lisansları vardır.

SOLVER_TYPE_GLOP

Google'ın Glop çözücü.

LPal ve çift tekel yöntemlerle desteklenir.

SOLVER_TYPE_CP_SAT

Google'ın CP-SAT çözücüsü.

Tüm değişkenlerin tam sayı olduğu ve sınırlı olduğu (ya da presolve sonrasında olacağı ima edilen) problemleri destekler. Sürekli değişkenlerle problemleri yeniden ölçeklendirmek ve ayrı ayrı ayırmak için deneysel destek.

SOLVER_TYPE_PDLP

Google'ın PDLP çözücü.

LP ve dışbükey diyagonal ikinci dereceden hedefleri destekler. Tekli yerine birinci dereceden yöntemleri kullanır. Çok büyük sorunları çözebilir.

SOLVER_TYPE_GLPK

GNU Doğrusal Programlama Kiti (GLPK) (üçüncü taraf).

MIP ve LP'yi destekler.

İş parçacığı güvenliği: GLPK, bellek ayırmaları için iş parçacığı yerel depolamasını kullanır. Sonuç olarak, Solver örnekleri oluşturuldukları iş parçacığında imha edilmelidir. Aksi takdirde GLPK kilitlenir. Solver::Solve(), Solver'ı oluşturmak için kullanılandan farklı bir iş parçacığından çağrılıyormuş gibi görünüyor, ancak GLPK tarafından belgelenmemiş ve bundan kaçınılmalıdır.

Çözümleyici ile bir LP çözerken, ancak optimum çözüm bulunduğunda çözüm (ve sınırsız ışıklar) ortaya çıkabilir. Aksi takdirde hiçbir şey döndürülmez. Ayrıntılar için glpk-5.0.tar.gz adresindeki glpk-5.0/doc/glpk.pdf #40 sayfasına bakın.

SOLVER_TYPE_OSQP

Operatör Bölme İkinci Düzey Program (OSQP) çözücü (üçüncü taraf).

Doğrusal kısıtlamalar ve doğrusal ya da dışbükey ikinci dereceden hedeflere sahip sürekli problemleri destekler. Birinci dereceden yöntemini kullanır.

SOLVER_TYPE_ECOS

Yerleşik Konik Çözücü (ECOS) (üçüncü taraf).

LP ve SOCP sorunlarını destekler. İç nokta yöntemleri (bariyer) kullanılır.

SOLVER_TYPE_SCS

Bölme Konik Çözücü (SCS) (üçüncü taraf).

LP ve SOCP sorunlarını destekler. Birinci dereceden yöntemini kullanır.

SOLVER_TYPE_HIGHS

HiGHS Solver (üçüncü taraf).

LP ve MIP sorunlarını destekler (dönüştürülen QP'ler uygulanmamıştır).

SOLVER_TYPE_SANTORINI

MathOpt'in referans olarak MIP çözücü uygulaması.

Yavaş/prodüksiyon için önerilmez. Bir LP çözücü değil (ikili bilgi döndürülmedi).

SosConstraintProto

Tek bir SOS1 veya SOS2 kısıtlamasını temsil eden veriler.

Bu kısıtlamaya dahil olan bir değişken silinirse sıfıra ayarlanmış gibi kabul edilir.

Alanlar
expressions[]

LinearExpressionProto

SOS kısıtlamasının uygulanacağı ifadeler: * SOS1: En fazla bir öğe sıfır olmayan bir değer alır. * SOS2: En fazla iki öğe sıfır olmayan bir değer alır ve tekrarlanan sıralamada bitişik olmalıdır.

weights[]

double

Boş veya ifadelere eşit uzunlukta. Boş bırakılırsa varsayılan ağırlıklar 1, 2, ... şeklindedir. Varsa, girişlerin benzersiz olması gerekir.

name

string

Üst mesajların bu alanda benzersizlik gereksinimleri olabilir; ör. ModelProto.sos1_ extra şartlar ve SosConstraintUpdatesProto.new_restrictionts sayfasına bakın.

SparseBasisStatusVector

Taban durumları vektörünün seyrek temsili.

Alanlar
ids[]

int64

Tüm öğeler farklı olacak şekilde (artan düzende) sıralanmalıdır.

values[]

BasisStatusProto

Kimliklere eşit uzunlukta olmalıdır.

SparseDoubleMatrixProto

Çiftler matrisinin seyrek temsili.

Matris; satır kimliği, sütun kimliği ve katsayının üç katı olarak depolanır. Bu üç vektör eşit uzunlukta olmalıdır. Tüm i öğeleri için detör (satır_kimlikleri[i], sütun_kimlikleri[i]) farklı olmalıdır. Girişler satır ana sırasına göre olmalıdır.

Alanlar
row_ids[]

int64

column_ids[]

int64

coefficients[]

double

NaN içeremez.

SparseDoubleVectorProto

Çiftler vektörünün az sayıdaki gösterimi.

Alanlar
ids[]

int64

Tüm öğeler farklı olacak şekilde (artan düzende) sıralanmalıdır.

values[]

double

Kimliklere eşit uzunlukta olmalıdır. NaN içeremez.

SparseInt32VectorProto

Tam sayı vektörünün seyrek temsili.

Alanlar
ids[]

int64

Tüm öğeler farklı olacak şekilde (artan düzende) sıralanmalıdır.

values[]

int32

Kimliklere eşit uzunlukta olmalıdır.

SparseVectorFilterProto

Bu ileti, SparseXxxxVector öğesinin belirli bölümlerinin sorgulanmasına/ayarlanmasına olanak tanır. Varsayılan davranış hiçbir şeyi filtrelememektir. Yaygın bir kullanım, çözümlerin yalnızca bölümlerinin (yalnızca sıfır olmayan değerler ve/veya yalnızca elle seçilmiş bir değişken değerler kümesi) sorgulamaktır.

Alanlar
skip_zero_values

bool

SparseBoolVectorProto için "sıfır", false değerine sahiptir.

filter_by_ids

bool

True (doğru) değerine ayarlandığında, yalnızca filter_id'lerde listelenen kimliklere karşılık gelen değerleri döndürür.

filtered_ids[]

int64

filter_by_id (doğru) değerine ayarlandığında kullanılacak kimliklerin listesi. filter_by_id yanlış olduğunda boş bırakılmalıdır. NOT: Bu değer boşsa ve filter_by_ids parametresi doğruysa sonuçta bilgi istemediğinizi belirtmiş olursunuz.

TerminationProto

Solve() çağrısının neden sonlandırıldığıyla ilgili tüm bilgiler.

Alanlar
reason

TerminationReasonProto

Değer TERMINATION_REASON_FEASIBLE veya TERMINATION_REASON_NO_SOLUTION_FOUND olduğunda limit içindeki ek bilgiler. Ayrıntılar için limit sayfasına bakın.

limit

LimitProto

Neden TERMINATION_REASON_FEASIBLE veya TERMINATION_REASON_NO_SOLUTION_FOUND olmadığı sürece LIMIT_UNSPECIFIED. Tüm çözücüler, sonlandırmaya neden olan sınırı her zaman belirleyemeyebilir. Nedeni belirlenemediğinde LIMIT_UNDETERMINED yöntemi kullanılır.

detail

string

Kapatma işlemiyle ilgili genellikle çözücüye özgü ek bilgiler.

problem_status

ProblemStatusProto

Temel ve ikili problemlerin uygulanabilirlik durumları. 18 Temmuz 2023'ten itibaren bu mesaj görünmüyor olabilir. Eksikse problem_status [sorun_durumu], SolveResultProto.solve_stats içinde bulunabilir.

objective_bounds

ObjectiveBoundsProto

Optimum hedef değerine göre sınırlanır. 18 Temmuz 2023'ten itibaren bu mesaj görünmüyor olabilir. Eksikse, destination_bounds.primal_bound SolveResultProto.solve.stats.best_primal_bound ve hedef_bounds.dual_bound içinde bulunabilir SolveResultProto.solve.stats.best_dual_bound içinde bulunabilir

TerminationReasonProto

Solve() çağrısının sonlandırılma nedeni.

Sıralamalar
TERMINATION_REASON_UNSPECIFIED
TERMINATION_REASON_OPTIMAL Kanıtlanabilir düzeyde optimum bir çözüm (sayısal toleranslara kadar) bulundu.
TERMINATION_REASON_INFEASIBLE Asal problemin uygulanabilir bir çözümü yok.
TERMINATION_REASON_UNBOUNDED Asal problem, uygulanabilirdir ve ilkel ışınla rastgele iyi çözümler bulunabilir.
TERMINATION_REASON_INFEASIBLE_OR_UNBOUNDED Asal problem uygulanabilir değil ya da sınırsız. Sorunun durumuyla ilgili daha fazla ayrıntıyı sol_stats.problem_status adresinde bulabilirsiniz. Gurobi'nin sınırsız durumunun burada eşlenebileceğini unutmayın.
TERMINATION_REASON_IMPRECISE

Sorun, yukarıdaki ölçütlerden biri (Optimum, Uygun Değil, Sınırlandırılmamış veya InfeasibleOrUnbounded) denenerek çözüldü ancak bir veya daha fazla tolerans karşılanmadı. Bazı ilkel/çift çözümler/ışınlar mevcuttur ancak bunlar ya bir miktar uygulanabilirlik söz konusu ya da (sorun neredeyse optimum ise) en iyi çözüm hedefi ile en iyi hedef sınırı arasında bir boşluk olabilir.

Kullanıcılar asal/çift çözüm/ışın ve çözüm istatistiklerini sorgulamaya devam edebilir, ancak sayısal hatalarla başa çıkmaktan kendileri sorumludur.

TERMINATION_REASON_FEASIBLE Optimize Edici bir tür sınıra ulaştı ve temel uygulanabilir bir çözüm döndürüldü. Ulaşılan sınır türünün ayrıntılı açıklaması için SolveResultProto.limit_detail konusuna bakın.
TERMINATION_REASON_NO_SOLUTION_FOUND Optimize Edici bir tür sınıra ulaşmış ve ilk uygun bir çözüm bulamamıştır. Ulaşılan sınır türünün ayrıntılı açıklaması için SolveResultProto.limit_detail konusuna bakın.
TERMINATION_REASON_NUMERICAL_ERROR Algoritma, düzeltilemeyen sayısal hatayla karşılaştığı için çalışmayı durdurdu. Çözüm bilgisi yok.
TERMINATION_REASON_OTHER_ERROR Yukarıda tanımlanan durumlardan biri kapsamında olmayan bir hata nedeniyle algoritma durduruldu. Çözüm bilgisi yok.

VariablesProto

Aşağıda kullanıldığı gibi, "#variables" = size(VariablesProto.ids) değerini tanımlıyoruz.

Alanlar
ids[]

int64

Negatif olmamalı ve kesinlikle artmalıdır. max(int64) değeri kullanılamıyor.

lower_bounds[]

double

Uzunluk, #variables eşit olmalıdır. Değerler [-inf, inf).

upper_bounds[]

double

Uzunluk #variables eşit olmalıdır. Değerler (-inf, inf]).

integers[]

bool

Uzunluk, #variables eşit olmalıdır. Değer, sürekli değişkenler için yanlış, tam sayı değişkenleri için ise doğrudur.

names[]

string

Ayarlanmazsa tümünün boş dizeler olduğu varsayılır. Aksi takdirde, uzunluğu #variables eşit olmalıdır.

Boş olmayan adların tümü farklı olmalıdır.