Giriş modelini çözer ve sonucu tek seferde döndürür. Geri çağırmaya ve artımlılığa ihtiyacınız olmadığında ve bir çözümün ilerlemesini izlemeniz gerekmediğinde bunu kullanın.
HTTP isteği
POST https://optimization.googleapis.com/v1/mathopt:solveMathOptModel
URL, gRPC Kod Dönüştürme söz dizimini kullanır.
İstek içeriği
İstek gövdesi, aşağıdaki yapıya sahip verileri içerir:
JSON gösterimi |
---|
{ "solverType": enum ( |
Alanlar | |
---|---|
solverType |
İsteğe bağlı. Problemi sayısal olarak çözmek için çözücü türü. Çözücü, modeldeki belirli bir özelliği desteklemiyorsa optimizasyon prosedürünün başarılı olmayacağını unutmayın. |
model |
Zorunlu. Çözülecek optimizasyon probleminin matematiksel temsili. |
parameters |
İsteğe bağlı. Tek bir çözümü kontrol etmek için kullanılan parametreler. allowÇıkış parametresi özel olarak işlenir. İleti geri çağırmalarını destekleyen çözücüler için bu değeri doğru olarak ayarlamak sunucunun bir ileti geri çağırması kaydetmesini sağlar. Ortaya çıkan mesajlar, SolveMathOptModelResponse.messages içinde döndürülür. Diğer çözücüler için allowExit'in doğru değerine ayarlanması hatayla sonuçlanır. |
modelParameters |
İsteğe bağlı. Giriş modeline özel tek bir çözme işlemini kontrol etmek için kullanılan parametreler (Modelden bağımsız parametreler için SolveParametersProto'ya bakın). |
Yanıt gövdesi
MathOpt'te tekli uzaktan çözme yanıtı.
Başarılı olursa yanıt metni aşağıdaki yapıyla birlikte verileri içerir:
JSON gösterimi |
---|
{
"result": {
object ( |
Alanlar | |
---|---|
result |
İstekteki model çözümleme çıktısının açıklaması. |
messages[] |
SolveParametersProto.enable_Exit kullanıldıysa, mesaj geri çağırmalarını destekleyen çözücülere ilişkin günlük mesajlarını içerir. |
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) çözümü. LP, MIP ve dışbükey olmayan tam sayı ikinci dereceden problemleri destekler. Ancak LP'ler için çift veri döndürülmez. LP'ler için GLOP'u tercih edin. |
SOLVER_TYPE_GUROBI |
Gurobi çözücü (üçüncü taraf). LP, MIP ve dışbükey olmayan tam sayı ikinci dereceden problemleri destekler. Genel olarak en hızlı seçenektir ancak özel lisanslamaya sahiptir. |
SOLVER_TYPE_GLOP |
Google'ın Yerküre çözücüsü. LP'yi primal ve çift tek yönlü yöntemlerle destekler. |
SOLVER_TYPE_CP_SAT |
Google'ın CP-SAT çözücüsü. Tüm değişkenlerin tam sayı ve sınırlı olduğu (veya p çözümlemeden sonra olduğu ima edilen) problemleri destekler. Sürekli değişkenlerle problemleri yeniden ölçeklendirmek ve ayırt etmek için deneysel destek. |
SOLVER_TYPE_PDLP |
Google'ın PDLP çözücüsü. LP ve dışbükey çapraz çapraz hedefleri destekler. Basit yerine birinci dereceden yöntemler 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 depolama alanını kullanır. Sonuç olarak, Çözümleyici örnekleri oluşturuldukları andan itibaren aynı iş parçacığında yok edilmelidir. Aksi takdirde, GLPK çöker. Çözümleyiciyi oluşturmak için kullanılan iş parçacığı yerine başka bir iş parçacığında Solver::Solve() çağrısı yapılabilir, ancak bu çağrı GLPK tarafından belgelenmemiştir ve bundan kaçınılmalıdır. Çözümleyiciyle bir LP'yi çözerken çözüm (ve bağlanmayan ışınlar) yalnızca en iyi çözüm bulunduğunda döndürülür. Aksi takdirde hiçbir şey döndürülmez. Ayrıntılı bilgi için glpk-5.0.tar.gz adresindeki glpk-5.0/doc/glpk.pdf sayfa #40'a göz atın. |
SOLVER_TYPE_OSQP |
Operatör Bölme İkinci dereceden Program (OSQP) çözücü (üçüncü taraf). Doğrusal kısıtlamalar ve doğrusal veya dışbükey ikinci dereceden hedefler içeren sürekli problemleri destekler. Birinci dereceden bir yöntem 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ıyor. |
SOLVER_TYPE_SCS |
Splitting Conic Solver (SCS) (üçüncü taraf). LP ve SOCP sorunlarını destekler. Birinci dereceden bir yöntem kullanır. |
SOLVER_TYPE_HIGHS |
HiGHS Solver (üçüncü taraf). LP ve MIP sorunlarını destekler (Dışbükey QP'ler uygulanmaz). |
SOLVER_TYPE_SANTORINI |
MathOpt'un bir MIP çözücüye ilişkin referans uygulaması. Yavaş/prodüksiyon için önerilmez. LP çözücü değil (ikili bilgi döndürülmez). |
ModelProto
Bir optimizasyon sorunu. MathOpt şunları destekler: - İsteğe bağlı sonlu sınırları olan sürekli ve tam sayı karar değişkenleri. - Küçültülmüş veya büyütülmüş, doğrusal ve ikinci dereceden hedefler (tek ya da birden çok hedef). - Aşağıdakiler dahil olmak üzere ç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ı
Kısıtlamalar varsayılan olarak "id-to-data" şeklinde gösterilir. haritalar. Ancak doğrusal kısıtlamaları daha verimli bir "dizi yapısı"nda temsil ederiz. biçimindedir.
JSON gösterimi |
---|
{ "name": string, "variables": { object ( |
Alanlar | |
---|---|
name |
|
variables |
|
objective |
Modeldeki birincil hedef. |
auxiliaryObjectives |
Çok amaçlı modellerde kullanım için yardımcı hedefler. Eşleme anahtarı kimlikleri [0, max(int64)) olmalıdır. Her öncelik ve boş olmayan her ad, benzersiz ve aynı zamanda birincil
|
linearConstraints |
|
linearConstraintMatrix |
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ır olarak ayarlanmış gibi kabul edilir. Gereksinimler: * DoğrusalConstraintMatrix.row_ids, DoğrusalConstraints.ids elemanlarıdır. * DoğrusalConstraintMatrix.column_ids, değişkenleri.ids'in öğeleridir. * Belirtilmeyen matris girişleri sıfırdır. * DoğrusalConstraintMatrix.değerlerinin tümü sonlu olmalıdır. |
quadraticConstraints |
Modeldeki ikinci dereceden kısıtlamalar.
|
secondOrderConeConstraints |
Modeldeki ikinci derece koni kısıtlamaları.
|
sos1Constraints |
Modelde en fazla bir
|
sos2Constraints |
Modelde SOS2 kısıtlamaları,
|
indicatorConstraints |
Modelde ikili bir "gösterge değişkeni" varsa bunu zorunlu kılan gösterge kısıtlamaları değeri bir olarak ve ardından "ima edilen kısıtlama" tutması gerekir.
|
VariablesProto
Aşağıda kullanıldığı gibi, "#değişkenler"i tanımlarız = size(VariablesProto.ids).
JSON gösterimi |
---|
{ "ids": [ string ], "lowerBounds": [ number ], "upperBounds": [ number ], "integers": [ boolean ], "names": [ string ] } |
Alanlar | |
---|---|
ids[] |
Negatif olmamalı ve kesinlikle artan bir değer olmalıdır. max(int64) değeri kullanılamıyor. |
lowerBounds[] |
Uzunluk #variables, değerleri [-inf, inf) olmalıdır. |
upperBounds[] |
Uzunluk #variables, (-inf, inf] içindeki değerler) olmalıdır. |
integers[] |
Uzunluk #variables değerine eşit olmalıdır. Sürekli değişkenler için değer false, tamsayı değişkenler için doğrudur. |
names[] |
Politika ayarlanmazsa tüm boş dizeler olduğu varsayılır. Aksi takdirde, uzunluk değeri #variables değerine eşit olmalıdır. Boş olmayan tüm adlar farklı olmalıdır. |
ObjectiveProto
JSON gösterimi |
---|
{ "maximize": boolean, "offset": number, "linearCoefficients": { object ( |
Alanlar | |
---|---|
maximize |
yanlış ise en aza indirgenir, doğru ise en üst düzeye çıkarır |
offset |
NaN değil, sonlu olmalıdır. |
linearCoefficients |
Karar değişkenlerinde doğrusal olan ObjectiveProto terimleri. Gereksinimler: * doğrusalCo gölges.ids, VariablesProto.ids'nin öğeleridir. * VariablesProto belirtilmeyenler sıfıra karşılık gelir. * Doğrusal Katsayılar.değerleri sonlu olmalıdır. * Doğrusal Katsayılar.değerler sıfır olabilir, ancak bu durumda alan boşa harcanır. |
quadraticCoefficients |
Karar değişkenlerinde ikinci dereceden olan nesnel terimler. SparseDoubleClickMatrixProto mesajlarındakilere ek olarak gereksinimler: * İkinci dereceden katsayılar.row_ids'nin her öğesi ve ikinci dereceden katsayılar.sütun_kimlikleri öğesinin her öğesi, Değişkenler Protokolleri'nin bir öğesi olmalıdır. * Matris, üst üç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ın elemanları sıfır olabilir, ancak bu durumda alan boşa harcanır. |
name |
Üst mesajlar için bu alanda benzersizlik koşulları olabilir; Ör. ModelProto.objectives ve AuxiliaryObjectivesUpdatesProto.new_objectives öğelerine bakın. |
priority |
Çok amaçlı problemlerde bu hedefin diğerlerine göre önceliği (düşük olması daha önemlidir). Bu değer negatif olmayan bir sayı olmalıdır. Ayrıca, modeldeki her bir hedef öncelik, çözme 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. |
SparseDoubleVectorProto
Çiftler vektörünün seyrek gösterimi.
JSON gösterimi |
---|
{ "ids": [ string ], "values": [ number ] } |
Alanlar | |
---|---|
ids[] |
Tüm öğeler farklı olacak şekilde sıralanmalıdır (artan düzende). |
values[] |
Kimliklerle eşit uzunlukta olmalıdır. NaN içeremez. |
SparseDoubleMatrixProto
Çiftler matrisinin seyrek gösterimi.
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 için delik (rowIds[i], columnIds[i]) farklı olmalıdır. Girişler satır majör sırada olmalıdır.
JSON gösterimi |
---|
{ "rowIds": [ string ], "columnIds": [ string ], "coefficients": [ number ] } |
Alanlar | |
---|---|
rowIds[] |
|
columnIds[] |
|
coefficients[] |
NaN içeremez. |
LinearConstraintsProto
Aşağıda kullanıldığı gibi, "#doğrusal kısıtlamalar" = size(DoğrusalConstraintsProto.ids).
JSON gösterimi |
---|
{ "ids": [ string ], "lowerBounds": [ number ], "upperBounds": [ number ], "names": [ string ] } |
Alanlar | |
---|---|
ids[] |
Negatif olmamalı ve kesinlikle artan bir değer olmalıdır. max(int64) değeri kullanılamıyor. |
lowerBounds[] |
Uzunluk #doğrusal kısıtlamalara, değerlere [-inf, inf) eşit olmalıdır. |
upperBounds[] |
Uzunluk #doğrusal kısıtlamalara, değerlere (-inf, inf]) eşit olmalıdır. |
names[] |
Politika ayarlanmazsa tüm boş dizeler olduğu varsayılır. Aksi takdirde, uzunluk #doğrusal kısıtlamalara eşit olmalıdır. Boş olmayan tüm adlar farklı olmalıdır. |
QuadraticConstraintProto
Şu biçimde tek bir ikinci dereceden kısıt: lb <= sum{ Güneşli Şartlar} + sum{kadratik Terimleri} <= ub.
Bu kısıtlamaya dahil olan bir değişken silinirse sıfır olarak ayarlanmış gibi kabul edilir.
JSON gösterimi |
---|
{ "linearTerms": { object ( |
Alanlar | |
---|---|
linearTerms |
Karar değişkenlerinde doğrusal olan terimler. SparseDoubleClickVectorProto mesajlarındaki koşullara ek olarak şu şartı da yerine getirmemiz gerekiyor: * DoğrusalTerimler.ids, VariablesProto.ids'in öğeleridir. * doğrusalTerimler.değerleri sonlu olmalı, NaN olmamalıdır. Notlar: * Çıkarılan değişken kimliklerinin katsayısı sıfırdır. * doğrusalTerimler.değerleri sıfır olabilir, ancak bu durumda boşa harcanır. |
quadraticTerms |
Karar değişkenlerinde ikinci dereceden olan terimler. SparseDoubleClickMatrixProto mesajlarındaki şartlara ek olarak şu şartı da yerine getirmemiz gerekir: * quadraticterms.row_ids öğesinin her öğesi ve quadraticTERMS.column_ids öğesinin her bir öğesi, VariablesProto.ids öğesinin bir öğesi olmalıdır. * Matris, üst üçgen olmalıdır: her i için quadraticterms.row_ids[i] <= quadraticterms.column_ids[i]. Notlar: * Açıkça depolanmayan terimlerin katsayısı sıfırdır. * İkinci dereceden Terimler.katsayıları'nın öğeleri sıfır olabilir, ancak bu durumda alan boşa harcanır. |
lowerBound |
[-inf, inf) değerine sahip olmalı ve en fazla |
upperBound |
(-inf, inf] cinsinden değere sahip olmalı ve |
name |
Üst mesajlar için bu alanda benzersizlik koşulları olabilir; Ör. ModelProto.quadratic_restrictedts ve QuadraticConstraintUpdatesProto.new_Restrictts bölümlerine bakın. |
SecondOrderConeConstraintProto
Şu biçimde tek bir ikinci derece koni kısıtlaması:
||argumentsToNorm
||_2 <= upperBound
,
Burada upperBound
ve her bir argumentsToNorm
öğesi doğrusal ifadelerdir.
Bu kısıtlamaya dahil olan bir değişken silinirse sıfır olarak ayarlanmış gibi kabul edilir.
JSON gösterimi |
---|
{ "upperBound": { object ( |
Alanlar | |
---|---|
upperBound |
|
argumentsToNorm[] |
|
name |
Üst mesajlar için bu alanda benzersizlik koşulları olabilir; Örneğin, bkz. |
LinearExpressionProto
Doğrusal bir ifadenin seyrek gösterimi (değişkenlerin ağırlıklı toplamı ve sabit bir ofset).
JSON gösterimi |
---|
{ "ids": [ string ], "coefficients": [ number ], "offset": number } |
Alanlar | |
---|---|
ids[] |
Değişkenlerin kimlikleri. Tüm öğeler farklı olacak şekilde sıralanmalıdır (artan düzende). |
coefficients[] |
Kimliklerle eşit uzunlukta olmalıdır. Değerler sonlu olmalıdır. Değerler NaN olamaz. |
offset |
Sonlu olmalıdır ve NaN olmayabilir. |
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ır olarak ayarlanmış gibi kabul edilir.
JSON gösterimi |
---|
{
"expressions": [
{
object ( |
Alanlar | |
---|---|
expressions[] |
SOS kısıtlamasının uygulanacağı ifadeler: * SOS1: En fazla bir öğe sıfır dışında bir değer alır. * SOS2: En fazla iki öğe sıfır dışında değer alır ve tekrarlanan sıralamada bitişik olmalıdır. |
weights[] |
Boş veya ifadelere eşit uzunluktaki öğeler. Boşsa varsayılan ağırlıklar 1, 2 ve ... olur. Varsa girişler benzersiz olmalıdır. |
name |
Üst mesajlar için bu alanda benzersizlik koşulları olabilir; Ör. ModelProto.sos1_Restrictts ve SosConstraintUpdatesProto.new_Restrictts bölümlerine bakın. |
IndicatorConstraintProto
Şu biçimdeki tek bir gösterge kısıtlamasını temsil eden veriler: Variable(indicatorId) = (activateOnZero ? 0 : 1) 🎃 altBound <= ifade <= üstBound.
Bu kısıtlamaya dahil olan bir değişken (gösterge veya expression
içinde görünen) silinirse sıfır olarak ayarlanmış gibi kabul edilir. Özellikle, gösterge değişkeninin silinmesi, activateOnZero
yanlışsa gösterge kısıtlamasının boş olduğu ve activateOnZero
doğruysa doğrusal bir kısıtlamaya eşdeğer olduğu anlamına gelir.
JSON gösterimi |
---|
{
"activateOnZero": boolean,
"expression": {
object ( |
Alanlar | |
---|---|
activateOnZero |
Doğru ise, gösterge değişkeni 0 değerini alırsa ima edilen sınırlama geçerli olmalıdır. Aksi takdirde, gösterge değişkeni 1 değerini alırsa, ima edilen sınırlama geçerli olmalıdır. |
expression |
Kapsayıcı modelle ilgili olarak geçerli bir doğrusal ifade olmalıdır: * |
lowerBound |
[-inf, inf); değeri olmalıdır; NaN olamaz. |
upperBound |
(-inf, inf] cinsinden değer içermelidir; NaN olamaz. |
name |
Üst mesajlar için bu alanda benzersizlik koşulları olabilir; Örneğin, bkz. |
indicatorId |
İkili değişkene karşılık gelen veya ayarlanmamış kimlik. Politika ayarlanmazsa gösterge kısıtlaması yok sayılır. Ayarlanırsa şu şartı zorunlu kılarız: * VariablesProto.integers[indicatorId] = true, * VariablesProto.lower_bounds[indicatorId] >= 0, * VariablesProto.upper_bounds[indicatorId] <= 1. Bu koşullar MathOpt tarafından doğrulanmaz, ancak karşılanmazsa çözücünün çözüldüğünde hata döndürmesine neden olur. |
SolveParametersProto
Tek bir çözümü kontrol etmek için kullanılan parametreler.
Tüm çözücüler için ortak olan her iki parametreyi de içerir, ör. timeLimit ve belirli bir çözücüye ait parametreler, ör. gscip. Bir değer hem ortak hem de çözücüye özel alanda ayarlanırsa çözücüye özel ayar kullanılır.
İsteğe bağlı ve ayarlanmamış ortak parametreler veya değeri belirtilmemiş bir enum, çözücü varsayılanının kullanıldığını gösterir.
Kullanılan dışındaki çözücülere özel çözme parametreleri yoksayılır.
Modele bağlı olan parametreler (ör. her değişken için dallara ayırma önceliği ayarlanır) ModelSolveParametersProto'da iletilir.
JSON gösterimi |
---|
{ "timeLimit": string, "enableOutput": boolean, "lpAlgorithm": enum ( |
Alanlar | |
---|---|
timeLimit |
Çözücünün problem üzerinde harcayacağı maksimum süre (ya da ayarlanmamışsa sonsuz). Bu değer kesin bir sınır değildir ve çözme süresi bu değeri biraz aşabilir. Bu parametre her zaman temel çözücüye iletilir. Çözücü varsayılanı kullanılmaz. En fazla dokuz kesir basamağı olan ve " |
enableOutput |
Çözücü uygulama izlerinin yazdırılmasını sağlar. Bu izlerin konumları çözücüye bağlıdır. SCIP ve Gurobi için bu, standart çıkış akışları olacaktır. Glop ve CP-SAT için bu, LOG(INFO) olacaktır. Çözücü, mesaj geri çağırma özelliğini destekliyorsa ve kullanıcı bunun için bir geri çağırma kaydederse bu parametre değerinin yoksayılacağını ve hiçbir iz yazdırılmayacağını unutmayın. |
lpAlgorithm |
Doğrusal bir program çözme algoritması. LP_ALGORITHM_UNSPECIFIED ise çözücü varsayılan algoritmasını kullanın. Doğrusal olmayan programlar değil, ancak doğrusal programlamanın bir alt rutin olduğu problemler için çözücüler bu değeri kullanabilir. Ör. MIP çözücüler genellikle bunu yalnızca kök LP çözümü için kullanır (aksi takdirde çift tek yönlüdür). |
presolve |
Ana algoritmaya başlamadan önce problemi basitleştirmeye çalışın veya EMPHASIS_UNSPECIFIED ise problem çözücünün varsayılan çaba seviyesi. |
cuts |
Daha güçlü bir LP gevşetme düzeyini (yalnızca MIP) veya çözücü varsayılan çaba düzeyini (EMPHASIS_UNSPECIFIED) elde etmeye çalışın. NOT: Kesmelerin devre dışı bırakılması, geri çağırmaların MIP_NODE'da kesme ekleme imkanının olmasını engelleyebilir. Bu davranış, çözücüye özgüdür. |
heuristics |
Arama prosedürünün tamamında karşılaşılanların (yalnızca MIP) veya EMPHASIS_UNSPECIFIED ise çözücünün varsayılan çaba düzeyinin dışında uygulanabilir çözümler bulmaya yönelik çaba. |
scaling |
Sayısal kararlılığı iyileştirmek için problemi yeniden ölçeklendirmeye çalışılır. EMPHASIS_UNSPECIFIED ise problem çözücünün varsayılan çaba düzeyi olacaktır. |
iterationLimit |
Temel algoritmanın iterasyonlarını sınırlandırma (ör. tek yönlü pivotlar). Belirli davranış, çözücüye ve kullanılan algoritmaya bağlıdır ancak genellikle deterministik bir çözme sınırı verebilir (ör. bir iş parçacığı gibi daha fazla yapılandırma gerekebilir). Tipik olarak LP, QP ve MIP çözücüler tarafından desteklenir ancak MIP çözücüler için de nodeLimit öğesine bakın. |
nodeLimit |
Numaralı aramada çözülen alt problemlerin sayısına yönelik sınırlama (ör. dal ve sınır). Birçok çözücü için bu, hesaplamayı belirleyici olarak sınırlamak için kullanılabilir (daha fazla yapılandırma gerekebilir, ör. bir iş parçacığı). Genellikle MIP çözücüler için iterationLimit öğesine de bakın. |
cutoffLimit |
Çözücü, en az kesme kadar iyi ilkel çözümler olmadığını kanıtlayabilirse erken durur. Erken durdurmada, çözücü NO_SOLUTION_FOUND sonlandırma nedenini CUTOFF sınırı ile döndürür ve herhangi bir ekstra çözüm bilgisi vermesi gerekmez. Erken durdurma yapılmazsa döndürülen değer üzerinde hiçbir etkisi yoktur. Hedefi tam olarak kesim değerine eşit olan çözümlerin döndürülmesini istiyorsanız tolerans kullanmanız önerilir. Daha fazla ayrıntı ve bestBoundLimit ile karşılaştırma için kullanıcı kılavuzuna bakın. |
objectiveLimit |
Çözme aracı, en azından bu kadar iyi bir çözüm bulur bulmaz durur. Sonlandırma nedeni FEASIBLE ve HEDEFLEME'yi sınırlandırır. |
bestBoundLimit |
Çözme aracı, en iyi sınırın en azından bu kadar iyi olduğunu kanıtlar almaz durur ve sonlandırma nedeni FEASIBLE veya NO_SOLUTION_FOUND olur ve OBJECTIVE ile sınırlanır. Daha fazla ayrıntı ve kesimSınırla karşılaştırması için kullanıcı rehberine bakın. |
solutionLimit |
Çözme aracı, bu kadar çok uygulanabilir çözümü bulduktan sonra erken durur. Sonuçlandırma nedeni GEÇERLİDİR ve ÇÖZÜMÜ sınırlandırır. Ayarlanırsa sıfırdan büyük olmalıdır. Çözücünün bulunan ilk uygulanabilir çözümde durmasını sağlamak için genellikle kullanılır. Döndürülen çözümlerin hedef değeriyle ilgili herhangi bir garanti verilmediğini unutmayın. Çözücüler genellikle çözüm sınırından daha fazla çözüm döndürmez ancak bu durum MathOpt tarafından zorunlu kılınmaz. Ayrıca bkz. b/214041169. Şu anda Gurobi ile SCIP ve yalnızca 1 değerine sahip CP-SAT için desteklenmektedir. |
threads |
Ayarlanırsa >= 1 olmalıdır. |
randomSeed |
Temel çözücüdeki sözde rastgele sayı oluşturucunun başlangıç noktası. Tüm çözücülerin LP algoritmasındaki pertürbasyon, bağı ayırma kuralları ve buluşsal düzeltmeler için sözde rastgele sayılar kullandığını unutmayın. Bunun değiştirilmesinin çözme aracı davranışı üzerinde belirgin bir etkisi olabilir. Tüm çözücüler tohum kavramına sahip olsa da geçerli değerlerin gerçek çözücüye bağlı olduğunu unutmayın. - Gurobi: [0:GRB_MAXINT] (Gurobi 9.0 itibarıyla 2x10^9 değerindedir). - GSCIP: [0:2147483647] (MAX_INT veya kint32max ya da 2^31-1) - GLOP: [0:2147483647] (yukarıdakiyle aynı) Tüm durumlarda çözücü, şuna eşit bir değer alır: MAX(0, MIN(MAX_VALID_VALUE_FOR_SOLVER, duplicateSeed)). |
absoluteGapTolerance |
MIP çözücüler için mutlak optimumluk toleransı (öncelikle). Mutlak GAP, şunlar arasındaki farkın mutlak değeridir: * bulunan en uygun çözümün hedef değeri, * aramanın üretilen çift sınır. Çözücü, mutlak GAP en fazla Mutlak GapTolerance olduğunda (ayarlandığında) durabilir ve TERMINATION_REASON_OPTIMAL döndürebilir. Ayarlanmışsa >= 0 olmalıdır. Ayrıca göreliGapTolerance konusuna bakın. |
relativeGapTolerance |
MIP çözücüler için göreceli optimumluk toleransı (öncelikle). Göreli GAP, mutlak GAP'nin (mutlakGapTolerance ile tanımlanır) normalleştirilmiş bir sürümüdür.Normalleştirme, çözücüye bağlıdır, ör. mutlak GAP'nin, bulunan en uygun çözümün nesnel değerine bölünmesiyle elde edilir. Çözücü, göreli GAP en fazla göreliGapTolerance (ayarlandığında) değerine ulaştığında durabilir ve TERMINATION_REASON_OPTIMAL değerini döndürebilir. Ayarlanmışsa >= 0 olmalıdır. Ayrıca MutlakGapTolerance konusuna da bakın. |
solutionPoolSize |
Arama yaparken |
LPAlgorithmProto
Doğrusal programları çözmek için bir algoritma seçer.
Sıralamalar | |
---|---|
LP_ALGORITHM_UNSPECIFIED |
|
LP_ALGORITHM_PRIMAL_SIMPLEX |
(Primal) tek yönlü yöntemi. Tipik olarak ilkel ve ikili çözüm, ilkel/çift sınırsız problemlerde primal/çift ışınlar ve bir temel sağlayabilir. |
LP_ALGORITHM_DUAL_SIMPLEX |
Çift tek yönlü yöntemi. Tipik olarak ilkel ve ikili çözüm, ilkel/çift sınırsız problemlerde 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öntemi. Genellikle hem ilkel hem de ikili çözümler verebilir. Bazı uygulamalar, sınırsız/uygulanamayan problemler üzerinde de ışınlar üretebilir. Temel çözücü "Çapraz geçiş" yapmadığı sürece temel verilmez tek renkle bitirir. |
LP_ALGORITHM_FIRST_ORDER |
Birinci dereceden yönteme dayalı bir algoritma. Bunlar genellikle hem ilk hem de ikili çözümler üretir ve potansiyel olarak ilkel ve/veya çift uygulanabilirsizlik sertifikaları sağlar. Birinci dereceden yöntemler genellikle daha düşük doğruluk oranıyla çözümler sunar.Bu nedenle, kullanıcıların çözüm kalite parametrelerini (ör. toleranslar) ayarlamaya ve çözümleri doğrulamaya dikkat etmesi gerekir. |
EmphasisProto
Çözme sırasında isteğe bağlı bir göreve uygulanan çaba seviyesi (kullanım için bkz. SolveParametersProto).
Vurgu, bir çözücü özelliğini aşağıdaki gibi yapılandırmak için kullanılır: * Çözücü bu özelliği desteklemiyorsa yalnızca UNSPECIFIED (BELİRTİLMEMİŞ) durumu geçerli olur, diğer tüm ayarlar genellikle geçersiz bağımsız değişken hatasına neden olur (bazı çözücüler KAPALI'yı da kabul edebilir). * Çözücü özelliği destekliyorsa: - BELİRTİLMEMİŞ olarak ayarlandığında temel varsayılan kullanılır. - Özellik kapatılamadığında, KAPALI işlevi bir hata döndürür. - Özellik varsayılan olarak etkinleştirilmişse çözücü varsayılanı genellikle ORTA ile eşlenir. - Özellik destekleniyorsa DÜŞÜK, ORTA, YÜKSEK ve ÇOK YÜKSEK seçenekleri hiçbir zaman hata vermez ve en iyi eşleşmeleriyle eşleşir.
Sıralamalar | |
---|---|
EMPHASIS_UNSPECIFIED |
|
EMPHASIS_OFF |
|
EMPHASIS_LOW |
|
EMPHASIS_MEDIUM |
|
EMPHASIS_HIGH |
|
EMPHASIS_VERY_HIGH |
ModelSolveParametersProto
JSON gösterimi |
---|
{ "variableValuesFilter": { object ( |
Alanlar | |
---|---|
variableValuesFilter |
PrimalSolutionProto ve PrimalRayProto (PrimalSolutionProto.variable_values, PrimalRayProto.variable_values) değişkenler tarafından anahtarlanan tüm seyrek kapsayıcılara uygulanan filtre. Gereksinimler: * filterIds, VariablesProto.ids'in öğeleridir. |
dualValuesFilter |
DualSolutionProto ve DualRay (DualSolutionProto.dual_values, DualRay.dual_values) doğrusal kısıtlamalarla anahtarlanan tüm seyrek kapsayıcılara uygulanan filtre. Gereksinimler: * filterId'ler, DoğrusalConstraints.ids öğeleridir. |
reducedCostsFilter |
DualSolutionProto ve DualRay (DualSolutionProto.reduced_costs, DualRay.reduced_costs) değişkenler tarafından anahtarlanan tüm seyrek kapsayıcılara uygulanan filtre. Gereksinimler: * filterIds, VariablesProto.ids'in öğeleridir. |
initialBasis |
Hazır durumda başlayan basit LP çözücüler için isteğe bağlı ilk başlangıç temeli. Ayarlanırsa mevcut |
solutionHints[] |
İsteğe bağlı çözüm ipuçları. Temel çözücü yalnızca tek bir ipucu kabul ediyorsa ilk ipucu kullanılır. |
branchingPriorities |
İsteğe bağlı kollara ayırma öncelikleri. Daha yüksek değerlere sahip değişkenler ilk önce dallara ayrılır. Öncelikleri ayarlanmayan değişkenler, çözücünün varsayılan önceliğini alır (genellikle sıfır). Gereksinimler: * BraingPriorities.values sonlu olmalıdır. * şubelemePriorities.ids, VariablesProto.ids'in öğeleri olmalıdır. |
SparseVectorFilterProto
Bu mesaj, SparseXxxxVector'ın 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 bazı bölümlerini (yalnızca sıfır olmayan değerler ve/veya yalnızca elle seçilmiş bir dizi değişken değeri) sorgulamaktır.
JSON gösterimi |
---|
{ "skipZeroValues": boolean, "filterByIds": boolean, "filteredIds": [ string ] } |
Alanlar | |
---|---|
skipZeroValues |
SparseBoolVectorProto için "zero" |
filterByIds |
Doğru olduğunda, yalnızca filtrelenen kimlikler içinde listelenen kimliklere karşılık gelen değerleri döndürür. |
filteredIds[] |
filterByIds doğru değerine ayarlandığında kullanılacak kimliklerin listesi. filterByIds yanlış değerine ayarlandığında boş bırakılmalıdır. NOT: Bu alan boşsa ve filterByIds doğruysa sonuçta herhangi bir bilgi istemediğiniz anlamına gelir. |
BasisProto
Doğrusal bir program çözümünün kombinatorik karakterizasyonu.
Doğrusal programları çözmek için tek yönlü bir yöntem her zaman "temel uygulanabilir çözüm" döndürür açıklanabilir. Bu da temel ile birlikte açıklanabilir. Bir temel, her değişken ve doğrusal sınırlama için bir BasisStatusProto atar.
Ör. standart bir LP biçimi kullanmayı düşünün: min c * x s.t. Kısıtlamalardan daha fazla değişkeni olan ve tam satır sıralaması A olan A * x = b x >= 0.
n, değişken sayısı, m ise doğrusal kısıtlamaların sayısı olsun. Bu sorun için geçerli bir temel aşağıdaki gibi oluşturulabilir: * Tüm kısıtlamaların temel durumu FIXED olacaktır. * A sütunları doğrusal olarak bağımsız olacak şekilde m değişkenleri seçin ve bu değişkenleri BASIC durumunu atayın. * Kalan n - m değişkenlerine AT_LOWER durumunu atayın.
Bu temelin temel çözümü, AT_LOWER durumundaki tüm değişkenlerin alt sınırlarına sabitlendiği (tümü sıfır) A * x = b formülüdür. Sonuçta ortaya çıkan çözüm, x >= 0 değerini de karşılıyorsa temel uygulanabilir çözüm olarak adlandırılır.
JSON gösterimi |
---|
{ "constraintStatus": { object ( |
Alanlar | |
---|---|
constraintStatus |
Kısıtlama temel durumu. Gereksinimler: * restrictionStatus.ids, DoğrusalConstraints.ids parametresine eşittir. |
variableStatus |
Değişken temel durumu. Gereksinimler: * restrictionStatus.ids, VariablesProto.ids'e eşittir. |
basicDualFeasibility |
Bu, MathOpt tarafından optimum olmayan LP çözümlerinin uygulanabilirliğini tanımlamak için kullanılan gelişmiş bir özelliktir (optimum çözümler her zaman SOLUTION_STATUS_FEASIBLE durumundadır). Tek taraflı LP'ler için bu değer, ilişkili ikili çözümün uygulanabilirlik durumuna eşit olmalıdır. İki taraflı LP'lerde ise bazı sıra dışı durumlarda farklı olabilir (ör. ilk basit pikselle eksik çözmeler). 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 temelle ilgilidir. |
SparseBasisStatusVector
Temel durumlar vektörünün seyrek gösterimi.
JSON gösterimi |
---|
{
"ids": [
string
],
"values": [
enum ( |
Alanlar | |
---|---|
ids[] |
Tüm öğeler farklı olacak şekilde sıralanmalıdır (artan düzende). |
values[] |
Kimliklerle eşit uzunlukta olmalıdır. |
BasisStatusProto
LP bazında bir değişkenin/kısıtlamanın durumu.
Sıralamalar | |
---|---|
BASIS_STATUS_UNSPECIFIED |
Hiçbir durumu temsil eden Guard 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/kısıtlama, alt sınırındadır (sonlu olmalıdır). |
BASIS_STATUS_AT_UPPER_BOUND |
Değişken/kısıtlama, üst sınırında (sonlu olmalıdır). |
BASIS_STATUS_FIXED_VALUE |
Değişkenin/kısıtlamanın aynı sonlu alt ve üst sınırları var. |
BASIS_STATUS_BASIC |
Değişken/kısıtlama temel düzeyde. |
SolutionStatusProto
Çözücü tarafından iddia edilen ilk veya ikili çözümün uygulanabilirliği.
Sıralamalar | |
---|---|
SOLUTION_STATUS_UNSPECIFIED |
Hiçbir durumu temsil eden Guard değeri. |
SOLUTION_STATUS_UNDETERMINED |
Çözücü bir uygulanabilirlik durumu iddia etmiyor. |
SOLUTION_STATUS_FEASIBLE |
Çözümcü çözümün uygulanabilir olduğunu iddia ediyor. |
SOLUTION_STATUS_INFEASIBLE |
Çözümcü çözümün uygulanabilir olmadığını iddia ediyor. |
SolutionHintProto
Çözücü için önerilen bir başlangıç çözümü.
MIP çözücüler genellikle yalnızca temel bilgileri (variableValues
), LP çözücüler ise hem temel hem de ikili bilgileri (dualValues
) ister.
Birçok MIP çözücü (1) tüm değişkenleri belirtmeyen kısmi çözümler veya (2) uygulanabilir 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 (varsa) nasıl kullanılacağı büyük ölçüde çözücüye, problem türüne ve kullanılan algoritmaya bağlıdır. İpucunuzun etkili olmasını sağlamanın en güvenilir yolu, temel çözücü günlüklerini ipucu kullanarak ve kullanmadan okumaktır.
Simplex tabanlı LP çözücüler, genellikle çözüm ipucuna başlangıç temelini tercih eder (aksi takdirde ipucunu temel bir uygulanabilir çözüme dönüştürmek için çapraz geçiş yapmaları gerekir).
JSON gösterimi |
---|
{ "variableValues": { object ( |
Alanlar | |
---|---|
variableValues |
Problemin ilkel değişkenlerine değerlerin muhtemelen kısmi atanması. Bu alt mesaj için çözücüden bağımsız gereksinimler şunlardır: * variableValues.ids, VariablesProto.ids'in öğeleridir. * variableValues.values tüm sonlu olmalıdır. |
dualValues |
Problemin doğrusal kısıtlamalarına değer atanması (potansiyel olarak kısmidir). Gereksinimler: * dualValues.ids, DoğrusalConstraintsProto.ids öğeleridir. * dualValues.values tüm değerleri sonlu olmalıdır. |
SparseInt32VectorProto
Tamsayı vektörünün seyrek gösterimi.
JSON gösterimi |
---|
{ "ids": [ string ], "values": [ integer ] } |
Alanlar | |
---|---|
ids[] |
Tüm öğeler farklı olacak şekilde sıralanmalıdır (artan düzende). |
values[] |
Kimliklerle eşit uzunlukta olmalıdır. |
SolveResultProto
İlk/ikili çözümlerin/ışınların karmaşık olduğu sözleşmelere ilişkin sözleşmenin tamamı için fesih_reasons.md dosyasına bakın.
Tam bir sözleşme kesinleşene kadar, fesih nedenine güvenmek yerine bir çözüm/ışın mevcut olup olmadığını kontrol etmek en güvenli yöntemdir.
JSON gösterimi |
---|
{ "termination": { object ( |
Alanlar | |
---|---|
termination |
Çözme aracının durma nedeni. |
solutions[] |
Gelecekte çözücülerin uygulaması gereken çözümlerin sırası için genel sözleşme şuna göre sıralama yapmaktır: 1. İlk olarak en iyi ilk hedefe göre sıralanmış ilk uygulanabilir çözüme sahip çözümler. 2. En iyi ikili hedefe (bilinmeyen çift hedef en kötüdür) göre sıralanan, çift uygulanabilir bir çözüme sahip çözümler 3. Kalan tüm çözümler herhangi bir sırada döndürülebilir. |
primalRays[] |
Sınırsız temel iyileştirme veya eşdeğer şekilde çift uygulanabilirlik sertifikası almama talimatları. Genellikle FesihNedeni Protos UNBOUNDED ve DUAL_INFEASIBLE için sağlanır. |
dualRays[] |
Sınırsız ikili iyileştirme veya eşdeğeri ilkesel uygulanabilirlik sertifikalarıyla ilgili talimatlar. Genellikle ExpirationStatusProto INFEASIBLE için sağlanır. |
solveStats |
Çözüm sürecine ilişkin istatistikler, ör. iterasyonlar ile yürütüldüğü anlamına gelir. |
TerminationProto
Solve() çağrısının neden sonlandırıldığıyla ilgili tüm bilgiler.
JSON gösterimi |
---|
{ "reason": enum ( |
Alanlar | |
---|---|
reason |
Değer TERMINATION_REASON_FEASIBLE veya TERMINATION_REASON_NO_SOLUTION_FOUND olduğunda |
limit |
Gerekçe TERMINATION_REASON_FEASIBLE veya TERMINATION_REASON_NO_SOLUTION_FOUND değilse LIMIT_UNSPECIFIED. Tüm çözücüler her zaman sonlandırmaya neden olan sınırı belirleyemez. LIMIT_UNDETERMINED, neden belirlenemediğinde kullanılır. |
detail |
Sonlandırma hakkında genellikle çözücüye özel ek bilgiler. |
problemStatus |
Temel ve ikili problemler için uygulanabilirlik durumları. 18 Temmuz 2023 itibarıyla bu mesaj kaybolabilir. Sorun durumu, eksikse SolveResultProto.solve_stats dosyasında bulunabilir. |
objectiveBounds |
Optimum hedef değerine ilişkin sınırlar. 18 Temmuz 2023 itibarıyla bu mesaj kaybolabilir. Hedef |
TerminationReasonProto
Solve() çağrısının sona erme nedeni.
Sıralamalar | |
---|---|
TERMINATION_REASON_UNSPECIFIED |
|
TERMINATION_REASON_OPTIMAL |
Kanıtlanabilir olarak ideal bir çözüm (sayısal toleranslara kadar) bulundu. |
TERMINATION_REASON_INFEASIBLE |
Temel problemin makul bir çözümü yok. |
TERMINATION_REASON_UNBOUNDED |
Temel problem uygulanabilir ve primal ışın üzerinde rastgele iyi çözümlere rastlanabilir. |
TERMINATION_REASON_INFEASIBLE_OR_UNBOUNDED |
Temel problem ya uygulanabilir ya da sınırsızdır. Sorunun durumuyla ilgili daha fazla ayrıntıya allowStats.problem_status sayfasından ulaşabilirsiniz. Gurobi'nin sınırsız durumunun burada eşlenebileceğini unutmayın. |
TERMINATION_REASON_IMPRECISE |
Problem, yukarıdaki kriterlerden birine göre çözüldü (Optimal, Infeasible, Unbounded veya InfeasibleOrUnbounded), ancak bir veya daha fazla tolerans karşılanmadı. Bazı ilkel/çift çözümler/ışınlar mevcuttur, ancak bunlar biraz uygulanabilir değildir veya (sorun neredeyse optimumsa) en iyi çözüm hedefi ile en iyi hedef sınırı arasında bir boşluk olabilir. Kullanıcılar temel/çift çözümleri/ışınları ve çözüm istatistiklerini sorgulamaya devam edebilir, ancak sayısal doğrulukla ilgilenmekten sorumludur. |
TERMINATION_REASON_FEASIBLE |
Optimize Edici bir tür sınıra ulaştı ve ilk uygulanabilir çö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 bölümüne bakın. |
TERMINATION_REASON_NO_SOLUTION_FOUND |
Optimize Edici bir tür sınıra ulaştı ve makul bir çözüm bulamadı. Ulaşılan sınır türünün ayrıntılı açıklaması için SolveResultProto.limit_detail bölümüne bakın. |
TERMINATION_REASON_NUMERICAL_ERROR |
Algoritma, düzeltilemeyen sayısal hatayla karşılaştığı için durdu. Çözüm bilgisi yok. |
TERMINATION_REASON_OTHER_ERROR |
Algoritma, yukarıda tanımlanan durumlardan birinin kapsamına girmeyen bir hata nedeniyle durduruldu. Çözüm bilgisi yok. |
LimitProto
Bir Solve(), ExpirationConditionProto FEASIBLE veya NO_SOLUTION_FOUND ile erken durduğunda, isabetli sınıra ulaşmış olursunuz.
Sıralamalar | |
---|---|
LIMIT_UNSPECIFIED |
Bir sınıra dayanarak sonlandırmadığımızda null 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 |
Yinelemeli bir algoritma, maksimum sayıda yineleme (ör. tek yönlü veya bariyer yinelemeleri) gerçekleştirdikten sonra durdu. |
LIMIT_TIME |
Algoritma, kullanıcı tarafından belirtilen hesaplama süresinden sonra durdu. |
LIMIT_NODE |
Dala ve dallara bağlı bir algoritma, dal ve bağlı ağaçta maksimum sayıda düğüm keşfettiği için durdu. |
LIMIT_SOLUTION |
Gerekli sayıda çözüm bulduğu için algoritma durdu. Bu yöntem, çoğu zaman MIP'lerde çözücünün karşılaştığı ilk uygulanabilir çözümü döndürmesini sağlamak için kullanılır. |
LIMIT_MEMORY |
Bellek tükendiği için algoritma durduruldu. |
LIMIT_CUTOFF |
Çözme aracı, hedef üzerinde bir kesimle (ör. SolveParameters.cutoff_limit ayarlanmış) çalıştırıldı. Bu, kullanıcının sondan daha kötü bir çözüm istemediğini gösterir. Çözücü, en az kesme değeri kadar iyi bir çözümün olmadığı sonucuna varmıştır. Genellikle çözüm için daha fazla bilgi sağlanmaz. |
LIMIT_OBJECTIVE |
Algoritma, kullanıcı tarafından ayarlanan sınırdan daha iyi bir çözüm veya sınır bulduğu için durdu (bkz. SolveParameters.objective_limit ve SolveParameters.best_bound_limit). |
LIMIT_NORM |
Yineleme normu çok büyük hale geldiği için algoritma durdu. |
LIMIT_INTERRUPTED |
Algoritma, bir kesme sinyali veya kullanıcı kesme isteği nedeniyle durdu. |
LIMIT_SLOW_PROGRESS |
Çözüme yönelik ilerleme kaydedilemediği için algoritma durduruldu. |
LIMIT_OTHER |
Algoritma, yukarıdakilerden birinin kapsamadığı bir sınır nedeniyle durduruldu. Neden belirlenemediğinde LIMIT_UNDETERMINED öğesinin, neden bilindiği halde yukarıdaki alternatiflerin hiçbirine uymadığında LIMIT_OTHER öğesinin kullanıldığını unutmayın. FesihProto.detail, sınır hakkında ek bilgiler içerebilir. |
ProblemStatusProto
Çözücü tarafından iddia edilen temel problemin ve ikilisinin (ya da sürekli gevşemenin ikilisi) uygulanabilirlik durumu. Çözücünün iddia için bir sertifika döndürmesi gerekmez (örneğin, çözücü, ilk uygulanabilir bir çözüm döndürmeden ilkel uygulanabilirlik iddiasında bulunabilir). Bu birleşik durum, çözücünün çözülen sorunun uygulanabilirliği ve sınırsızlığı hakkındaki iddialarına yönelik kapsamlı bir açıklama sağlar. Örneğin,
- ilk ve ikili problemler için uygulanabilir durumu, ilkel problemin uygulanabilir ve sınırlı olduğunu ve muhtemelen optimum bir çözüme sahip olduğunu gösterir (doğrusal olmayan kısıtlamalar olmadığı sorunlar için garanti edilir).
- İlk uygulanabilir ve çift uygulanabilir değil durumu, ilk problemin sınırsız olduğunu (yani rastgele iyi çözümlere sahip olduğunu) gösterir.
İkili uygulanabilir değil durumunun tek başına (belirsiz bir ilkel statüyle birlikte) temel problemin sınırsız olduğu anlamına gelmediğini unutmayın çünkü her iki problem de uygulanabilir olabilir. Ayrıca ilk ve çift uygulanabilir durumu, optimum çözümün var olduğunu ima edebilir ancak çözücünün gerçekten optimum çözümü bulduğunu garanti etmez.
JSON gösterimi |
---|
{ "primalStatus": enum ( |
Alanlar | |
---|---|
primalStatus |
Temel problemin durumu. |
dualStatus |
İkili problemin (veya sürekli gevşetme ikilisinin) durumu. |
primalOrDualInfeasible |
Doğru ise çözücü ilkel veya ikili problemin uygulanabilir olmadığını iddia eder ama hangisinin (ya da ikisinin de uygulanabilir olmadığını) bilemez. Yalnızca primal_problem_status = dual_problem_status = kUndetermined olduğunda doğru olabilir. Bu ek bilgi, genellikle ön işlemenin sorun için optimum bir çözüm olmadığını belirlediğinde (ancak sorunun uygulanabilirliğinden, sınırsızlıktan veya her ikisinden mi kaynaklandığını belirleyemediğinde) gerekir. |
FeasibilityStatusProto
Çözücü tarafından iddia edilen sorun uygulanabilirliği durumu (çözümün, talep için bir sertifika döndürmesi gerekmez).
Sıralamalar | |
---|---|
FEASIBILITY_STATUS_UNSPECIFIED |
Hiçbir durumu temsil eden Guard değeri. |
FEASIBILITY_STATUS_UNDETERMINED |
Çözücü bir statü talebinde bulunmaz. |
FEASIBILITY_STATUS_FEASIBLE |
Çözücü sorunun uygulanabilir olduğunu iddia ediyor. |
FEASIBILITY_STATUS_INFEASIBLE |
Çözücü, sorunun uygulanabilir olmadığını iddia ediyor. |
ObjectiveBoundsProto
Optimum hedef değerine ilişkin sınırlar.
JSON gösterimi |
---|
{ "primalBound": number, "dualBound": number } |
Alanlar | |
---|---|
primalBound |
Çözücü, optimum değerin, çözücülerin temel uygulanabilirlik toleransına kadar olan ilkel bağdan eşit veya daha iyi (küçültme için daha küçük, maksimizasyon için daha büyük) olduğunu iddia etmektedir. * primalBound, optimum değere, en iyi ilk uygulanabilir çözümün hedefine göre daha yakın olabilir. Özellikle, ilk uygulanabilir çözümler döndürülmese bile primalBound değeri önemsiz olabilir. Uyarı: *'nin sayısal olarak uygulanabilir (yani çözücü toleransına kadar uygulanabilir) ve * değerinin asalBound nesnel değerine sahip bir ilkel çözüm olduğu iddia edilir. Bu sayısal olarak uygulanabilir çözüm biraz uygulanabilir olmayabilir. Bu durumda, primalBound optimum değerden kesinlikle daha iyi olabilir. Özellikle uygulanabilirlik toleransı nispeten büyük olduğunda (ör. PDLP ile çözümleme sırasında) ilkel fizibilite toleransını ilkelBound'daki bir toleransa dönüştürmek önemsizdir. |
dualBound |
Çözücü, ideal değerin çift fizibilite toleransına kadar dualBound (küçültme için daha büyük, maksimizasyon için daha küçük) olduğunu iddia eder. PrialBound'a benzer bir şekilde, optimum değer döndürüldüğünde bile bazı çözücüler için bu durum görülebilir. MIP çözücüler tam olmasa bile genellikle bir sınır bildirir. * dualBound, sürekli sorunlar için en uygun ikili çözümün amacından optimum değere daha yakın olabilir. MIP için dualBound'un önemsiz olmayan ilk değerlerinden biri, genellikle MIP'nin LP gevşetmesinin optimum değeridir. * dualBound, çözücü toleranslarına kadar primalBound'dan daha iyi (küçültme için daha küçük, maksimizasyon için daha büyük) olmalıdır. (Aşağıdaki uyarıya bakın.) Uyarı: * Sürekli problemlerde asıl iddia, * sayısal olarak uygulanabilir (yani çözücü toleransına kadar uygulanabilir) ve * dualBound nesnel değerine sahip bir ikili çözümün bulunduğudur. Bu sayısal olarak uygulanabilir çözüm biraz uygulanabilir olmayabilir. Bu durumda dualBound, optimum değerden ve ilkelBound'dan kesinlikle daha kötü olabilir. İlk duruma benzer şekilde, özellikle uygulanabilirlik toleransı nispeten büyük olduğunda çift fizibilite toleransını dualBound'da bir toleransa dönüştürmek önemsiz bir yaklaşımdır. Bununla birlikte, bazı çözücüler dualBound'un sayısal olarak daha güvenli olabilecek düzeltilmiş bir sürümünü sağlar. Bu düzeltilmiş sürüme, çözücünün özel çıkışıyla erişilebilir (ör. PDLP, pdlp_çıkış.confergence_information.adjusted_dual_objective). * MIP çözücüler için dualBound, bir miktar sürekli gevşetme (ör.LP gevşemesi) için ikili bir çözümle ilişkilendirilebilir. Ancak bu durum genellikle çözücülerin yürütülmesinin karmaşık bir sonucudur ve LP çözücüler tarafından bildirilen sınırlardan daha kesin değildir. |
SolutionProto
Çözüme nelerin dahil edileceği, problemin ve çözücünün türüne göre değişir. Şu anda yaygın olan kalıplar 1'dir. MIP çözücüler yalnızca primal çözüm döndürür. 2. Basit LP çözücüler genellikle bir temel ve bu temelle ilişkili ilk ve ikili çözümleri döndürür. 3. Diğer sürekli çözücüler genellikle çözücüye bağlı bir biçimde bağlı ilkel ve ikili çözüm çözümlerini döndürür.
Gereksinimler: * en az bir alan ayarlanmalıdır; çözüm boş bırakılamaz.
JSON gösterimi |
---|
{ "primalSolution": { object ( |
Alanlar | |
---|---|
primalSolution |
|
dualSolution |
|
basis |
|
PrimalSolutionProto
Optimizasyon problemi için bir çözüm.
Ör. basit bir doğrusal program düşünün: min c * x s.t. H * x >= b x >= 0. Asal çözüm, x'e değer atamadır. Yukarıdaki A * x >= b ve x >= 0 değerlerini karşılıyorsa uygulanabilir. Aşağıdaki PrimalSolutionProto mesajında,variableValues x, hedefValue ise c * x'tir.
JSON gösterimi |
---|
{ "variableValues": { object ( |
Alanlar | |
---|---|
variableValues |
Gereksinimler: * variableValues.ids, VariablesProto.ids'in öğeleridir. * variableValues.values tüm sonlu olmalıdır. |
objectiveValue |
Temel çözücü tarafından hesaplanan nesnel değer. Sonsuz veya NaN olamaz. |
auxiliaryObjectiveValues |
Temel çözücü tarafından hesaplandığı şekilde yardımcı hedef değerleri. Anahtarlar, geçerli bir yardımcı hedef kimlikleri olmalıdır. Değerler sonsuz veya NaN olamaz.
|
feasibilityStatus |
Temel çözücüye göre çözümün uygulanabilirlik durumu. |
DualSolutionProto
Optimizasyon probleminin ikisine birden çözüm.
Ör. şu asal çift çiftli doğrusal program çiftini dikkate alın: (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 uygundur.
Aşağıdaki mesajda y dualValues, r azaltılmışMaliyetler ve b * y nesnel değerdir.
JSON gösterimi |
---|
{ "dualValues": { object ( |
Alanlar | |
---|---|
dualValues |
Gereksinimler: * dualValues.ids, DoğrusalConstraints.ids öğeleridir. * dualValues.values tüm değerleri sonlu olmalıdır. |
reducedCosts |
Gereksinimler: * Reduces.ids, VariablesProto.ids'nin öğeleridir. * İndirimliMaliyetler.değerlerinin tümü sonlu olmalıdır. |
feasibilityStatus |
Temel çözücüye göre çözümün uygulanabilirlik durumu. |
objectiveValue |
|
PrimalRayProto
Optimizasyon problemi için sınırsız iyileştirme yönü buna eşdeğer olarak, optimizasyon probleminin ikilisi için uygulanabilirlik sertifikası almalısınız.
Ör. basit bir doğrusal program düşünün: min c * x s.t. A * x >= b x >= 0 İlkel ışın şu koşulu karşılayan bir x'tir: c * x < 0 A * x >= 0 x >= 0 Makul bir çözüm verildiğinde ilkel ışın ile bu çözümün pozitif katları arasında hâlâ uygulanabilir olduğunu ve daha iyi bir objektif değer verdiğini gözlemleyin. İlkel ışın da ikili optimizasyon sorununun uygulanabilir olmadığını kanıtlar.
Aşağıdaki PrimalRay mesajında, variableValues değeri x'tir.
JSON gösterimi |
---|
{
"variableValues": {
object ( |
Alanlar | |
---|---|
variableValues |
Gereksinimler: * variableValues.ids, VariablesProto.ids'in öğeleridir. * variableValues.values tüm sonlu olmalıdır. |
DualRayProto
Optimizasyonun ikisine sınırsız iyileştirmenin yönü, sorun; buna karşılık ilkel uygulanabilirlik sertifikası bulunmalıdır.
Ör. şu asal çift çiftli doğrusal program çiftini dikkate alın: (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 ışın, b * y > hareketini tatmin eden (y, r) çiftidir 0 y * A + r = 0 y, r >= 0 İkili uygulanabilir çözüme (y, r) pozitif bir katı eklemenin çift uygulanabilirliği koruduğunu ve hedefi iyileştirdiğini (ikinin sınırsız olduğunu kanıtladığını) gözlemleyin. Çift ışın da ilkel problemin uygulanabilir olmadığını kanıtlıyor.
Aşağıdaki DualRay mesajında y dualValues, r ise azaltılmış maliyettir.
JSON gösterimi |
---|
{ "dualValues": { object ( |
Alanlar | |
---|---|
dualValues |
Gereksinimler: * dualValues.ids, DoğrusalConstraints.ids öğeleridir. * dualValues.values tüm değerleri sonlu olmalıdır. |
reducedCosts |
Gereksinimler: * Reduces.ids, VariablesProto.ids'nin öğeleridir. * İndirimliMaliyetler.değerlerinin tümü sonlu olmalıdır. |
SolveStatsProto
JSON gösterimi |
---|
{
"solveTime": string,
"problemStatus": {
object ( |
Alanlar | |
---|---|
solveTime |
matematik_optimizasyon ile ölçülen geçen gerçek süre (yaklaşık olarak Solver::Solve() içindeki süre). Not: Model oluşturmak için yapılan işler buna dahil değildir. En fazla dokuz kesir basamağı olan ve " |
problemStatus |
Temel ve ikili problemler için uygulanabilirlik durumları. |
simplexIterations |
|
barrierIterations |
|
firstOrderIterations |
|
nodeCount |
|