Girdi modelini çözer ve hemen sonucu döndürür. Geri çağırma veya artımlılığa ihtiyacınız yoksa 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
İsteğin gövdesi, aşağıdaki yapıya sahip veriler içerir:
JSON gösterimi |
---|
{ "solverType": enum ( |
Alanlar | |
---|---|
solverType |
İsteğe bağlı. Problemi sayısal olarak çözmek için çözücü yazma. Çözücü, modeldeki belirli bir özelliği desteklemiyorsa, optimizasyon işleminin 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 edecek parametreler. allowÇıktı parametresi özel olarak işlenir. Mesaj geri çağırmalarını destekleyen çözücüler için bu değeri true (doğru) olarak ayarlamak, sunucunun bir mesaj geri çağırması kaydetmesini sağlar. Ortaya çıkan mesajlar SolveMathOptModelResponse.messages özelliğinde döndürülür. Diğer çözücüler için, enableÇıktıyı true olarak ayarlamak hataya neden olur. |
modelParameters |
İsteğe bağlı. Giriş modeline özel tek bir çözümü kontrol edecek parametreler (modelden bağımsız parametreler için SolveParametersProto bölümüne bakın). |
Yanıt gövdesi
MathOpt.
Başarılı olursa yanıt metni aşağıdaki yapıyla birlikte verileri içerir:
JSON gösterimi |
---|
{
"result": {
object ( |
Alanlar | |
---|---|
result |
İstekteki modeli çözme işleminin sonucuyla ilgili açıklama. |
messages[] |
SolveParametersProto.enable_output değeri kullanıldıysa bu, mesaj geri çağırmalarını destekleyen çözücülerin 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) çö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). |
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.
JSON gösterimi |
---|
{ "name": string, "variables": { object ( |
Alanlar | |
---|---|
name |
|
variables |
|
objective |
Modeldeki birincil hedef. |
auxiliaryObjectives |
Ç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
|
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ıra ayarlanmış gibi kabul edilir. Gereksinimler: * linearConstraintMatrix.row_ids, linearConstraints.id öğelerinin öğeleridir. * linearConstraintMatrix.column_id değerleri değişkenler.kimliklerinin öğeleridir. * Belirtilmeyen matris girişleri sıfırdır. * linearConstraintMatrix.values değerlerinin tümü sonlu olmalıdır. |
quadraticConstraints |
Modeldeki ikinci dereceden kısıtlamalar.
|
secondOrderConeConstraints |
Modeldeki ikinci derece koni kısıtlamaları.
|
sos1Constraints |
Modeldeki, en fazla bir
|
sos2Constraints |
Modeldeki SOS2 kısıtlamaları (en fazla iki
|
indicatorConstraints |
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).
|
VariablesProto
Aşağıda kullanıldığı gibi, "#variables" = size(VariablesProto.ids) değerini tanımlıyoruz.
JSON gösterimi |
---|
{ "ids": [ string ], "lowerBounds": [ number ], "upperBounds": [ number ], "integers": [ boolean ], "names": [ string ] } |
Alanlar | |
---|---|
ids[] |
Negatif olmamalı ve kesinlikle artmalıdır. max(int64) değeri kullanılamıyor. |
lowerBounds[] |
Uzunluk, #variables eşit olmalıdır. Değerler [-inf, inf). |
upperBounds[] |
Uzunluk #variables eşit olmalıdır. Değerler (-inf, inf]). |
integers[] |
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[] |
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. |
ObjectiveProto
JSON gösterimi |
---|
{ "maximize": boolean, "offset": number, "linearCoefficients": { object ( |
Alanlar | |
---|---|
maximize |
yanlış en aza indirmek, doğru en üst düzeye çıkarmaktır |
offset |
NaN değil sonlu olmalıdır. |
linearCoefficients |
Karar değişkenlerinde doğrusal olan ObjectiveProto terimleri. Gereksinimler: * linearCoefficiencys.id , VariablesProto.id öğelerinin öğeleridir. * VariablesProto belirtilmeyen sıfıra karşılık gelir. * linearCosayıs.değerlerinin tamamı sonlu olmalıdır. * linearCosayıs.değerleri sıfır olabilir, ancak bu yalnızca alan israfına yol açar. |
quadraticCoefficients |
Karar değişkenlerinde ikinci dereceden olan nesnel terimler. SparseDoubleMatrixProto mesajlarına ek olarak gereksinimler: * quadraticCoefficiencys.row_id'lerin her bir öğesi ve quadraticCoefficiencys.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 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 |
Üst mesajların bu alanda benzersizlik gereksinimleri olabilir. Örneğin, ModelProto.objectives ve AuxiliaryObjectivesUpdatesProto.new_objectives konularına bakın. |
priority |
Ç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. |
SparseDoubleVectorProto
Çiftler vektörünün az sayıdaki gösterimi.
JSON gösterimi |
---|
{ "ids": [ string ], "values": [ number ] } |
Alanlar | |
---|---|
ids[] |
Tüm öğeler farklı olacak şekilde (artan düzende) sıralanmalıdır. |
values[] |
Kimliklere eşit uzunlukta olmalıdır. NaN içeremez. |
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 için unsur (rowIds[i], columnIds[i]) farklı olmalıdır. Girişler satır ana sırasına göre 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) tanımlarız.
JSON gösterimi |
---|
{ "ids": [ string ], "lowerBounds": [ number ], "upperBounds": [ number ], "names": [ string ] } |
Alanlar | |
---|---|
ids[] |
Negatif olmamalı ve kesinlikle artmalıdır. max(int64) değeri kullanılamıyor. |
lowerBounds[] |
Uzunluk, #doğrusal kısıtlamalara ve [-inf, inf] cinsinden değerlere eşit olmalıdır. |
upperBounds[] |
Uzunluk, #linear kısıtlamalarına eşit olmalıdır. Değerler (-inf, inf]). |
names[] |
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. |
QuadraticConstraintProto
Şu biçimdeki tek ikinci dereceden kısıtlama: lb <= sum{linearTerms} + sum{quadraticTerms} <= ub.
Bu kısıtlamaya dahil olan bir değişken silinirse sıfıra ayarlanmış gibi kabul edilir.
JSON gösterimi |
---|
{ "linearTerms": { object ( |
Alanlar | |
---|---|
linearTerms |
Karar değişkenlerinde doğrusal olan terimler. SparseDoubleVectorProto mesajlarındaki şartlara ek olarak: * linearTerms.id, VariablesProto.id öğelerinin öğeleridir. * linearTerms.values'ın tamamı sonlu olmalı ve NaN olmamalıdır. Notlar: * Atlanan değişken kimliklerine karşılık gelen sıfır katsayısı bulunur. * linearTerms.values ya da 0 değerini alır, ancak bu yalnızca alan boşa harcanır. |
quadraticTerms |
Karar değişkenlerinde ikinci dereceden olan terimler. SparseDoubleMatrixProto mesajlarıyla ilgili şartlara ek olarak: * quadraticTerms.row_id öğelerinin ve quadraticTerms.column_id öğelerinin her bir öğesinin VariablesProto.id öğelerinin bir öğesi olması gerekir. * Matris büyük üçgen olmalıdır: Her i için ikinci dereceden_satır_kimlikleri[i] <= ikinci derecedenTerimler.sütun_kimlikleri[i]. Notlar: * Açıkça depolanmayan terimlerin katsayısı sıfırdır. * quadraticTerms.cosayısı unsurları sıfır olabilir ancak bu yalnızca yer israfına yol açar. |
lowerBound |
[-inf, inf) değerinde ve en fazla |
upperBound |
(-inf, inf] aralığında değere sahip olmalı ve |
name |
Ü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ı:
||argumentsToNorm
||_2 <= upperBound
,
Burada upperBound
ve her argumentsToNorm
öğesi doğrusal ifadedir.
Bu kısıtlamaya dahil olan bir değişken silinirse sıfıra ayarlanmış gibi kabul edilir.
JSON gösterimi |
---|
{ "upperBound": { object ( |
Alanlar | |
---|---|
upperBound |
|
argumentsToNorm[] |
|
name |
Üst mesajların bu alanda benzersizlik gereksinimleri olabilir (ör. |
LinearExpressionProto
Doğrusal bir ifadenin seyrek temsili (değişkenlerin ağırlıklı toplamı artı sabit bir ofset).
JSON gösterimi |
---|
{ "ids": [ string ], "coefficients": [ number ], "offset": number } |
Alanlar | |
---|---|
ids[] |
Değişkenlerin kimlikleri. Tüm öğeler farklı olacak şekilde (artan düzende) sıralanmalıdır. |
coefficients[] |
Kimliklere eşit uzunlukta olmalıdır. Değerler sonlu olmalıdır, NaN olamaz. |
offset |
Sonlu olmalıdır ve NaN olamaz. |
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.
JSON gösterimi |
---|
{
"expressions": [
{
object ( |
Alanlar | |
---|---|
expressions[] |
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[] |
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 |
Üst mesajların bu alanda benzersizlik gereksinimleri olabilir; ör. ModelProto.sos1_ extra şartlar ve SosConstraintUpdatesProto.new_restrictionts sayfasına bakın. |
IndicatorConstraintProto
Şu biçimde tek bir gösterge kısıtlamasını temsil eden veriler: Variable(indicatorId) = (activateOnZero ? 0 : 1) ⇒ altBound <= ifade <= highBound.
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, activateOnZero
yanlışsa gösterge kısıtlamasının boş olacağı, activateOnZero
doğruysa doğrusal sınırlamaya eşdeğer olacağı 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 halde, gösterge değişkeni 1 değerini alırsa ima edilen sınırlamanın geçerli olması gerekir. |
expression |
İçeren modelle ilgili olarak geçerli bir doğrusal ifade olmalıdır: * |
lowerBound |
[-inf, inf] değerine sahip olmalıdır; NaN olamaz. |
upperBound |
(-inf, inf] değerine sahip olmalıdır; NaN olamaz. |
name |
Üst mesajların bu alanda benzersizlik gereksinimleri olabilir (ör. |
indicatorId |
İ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[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ü, çözme işleminden sonra hata döndürür. |
SolveParametersProto
Tek bir çözümü kontrol edecek parametreler.
Tüm çözücüler için ortak olan parametreleri (ör. timeLimit) ve belirli bir çözücüye ait parametreleri (ö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.
JSON gösterimi |
---|
{ "timeLimit": string, "enableOutput": boolean, "lpAlgorithm": enum ( |
Alanlar | |
---|---|
timeLimit |
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. " |
enableOutput |
Çö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. |
lpAlgorithm |
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 |
Ana algoritmaya başlamadan önce problemi basitleştirmeye çalışın veya EMPHASIS_UNSPECIFIED ise çözücü varsayılan çalışma düzeyini belirleyin. |
cuts |
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 |
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 |
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. |
iterationLimit |
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ığı). Tipik olarak LP, QP ve MIP çözücüler tarafından desteklenir ancak MIP çözücüler için NodeLimit'i de inceleyin. |
nodeLimit |
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 iterationLimit değerine bakın. |
cutoffLimit |
Çö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 bestBoundLimit ile ilgili bir karşılaştırma için kullanıcı rehberine bakın. |
objectiveLimit |
Çö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. |
bestBoundLimit |
Çö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 kesimoffLimit ile ilgili bir karşılaştırma için kullanıcı rehberine bakın. |
solutionLimit |
Çö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 |
Ayarlanırsa >= 1 olmalıdır. |
randomSeed |
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, RandomSeed)). |
absoluteGapTolerance |
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 mutlakGapTolerans değerine ulaştığında çözücü durabilir (ayarlandığında) ve TERMINATION_REASON_OPTIMAL değerini döndürebilir. Ayarlanmışsa >= 0 olmalıdır. GöreceliGapToleransı konusuna da bakın. |
relativeGapTolerance |
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 (mutlakGapTolerans 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öreceliGapTolerans 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 absoluteGapTolerance'a 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 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. |
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 |
ModelSolveParametersProto
JSON gösterimi |
---|
{ "variableValuesFilter": { object ( |
Alanlar | |
---|---|
variableValuesFilter |
PrimalSolutionProto ve PrimalRayProto (PrimalSolutionProto.variable_values, PrimalRayProto.variable_values) tarafından girilen tüm seyrek kapsayıcılara uygulanan filtre. Gereksinimler: * filterId'ler VariablesProto.id öğelerinin öğeleridir. |
dualValuesFilter |
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: * filterId'ler LinearConstraints.id öğelerinin öğeleridir. |
reducedCostsFilter |
DualSolutionProto ve DualRay (DualSolutionProto.reduced_costs, DualRay.reduced_costs) değişkenler tarafından girilen tüm seyrek kapsayıcılara uygulanan filtre. Gereksinimler: * filterId'ler VariablesProto.id öğelerinin öğeleridir. |
initialBasis |
Sıcak başlatılan tek LP çözücüler için isteğe bağlı başlangıç temeli. Ayarlanırsa mevcut |
solutionHints[] |
İsteğe bağlı çözüm ipuçları. Temel çözücü yalnızca tek bir ipucunu 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 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: * dalingPriorities.values sonlu olmalıdır. * dalingPriorities.id , VariablesProto.id öğelerinin öğeleri 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.
JSON gösterimi |
---|
{ "skipZeroValues": boolean, "filterByIds": boolean, "filteredIds": [ string ] } |
Alanlar | |
---|---|
skipZeroValues |
SparseBoolVectorProto için "sıfır", |
filterByIds |
Doğru olduğunda, yalnızca filtrelenmiş kimliklerde listelenen kimliklere karşılık gelen değerleri döndürür. |
filteredIds[] |
filterByIds true (doğru) olduğunda kullanılacak kimliklerin listesi. filterByIds yanlış değerine ayarlandığında boş olmalıdır. NOT: Bu değer boşsa ve filterByIds true (doğru) değerine sahipse, sonuçta bilgi görmek istemediğinizi belirtmiş olursunuz. |
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.
JSON gösterimi |
---|
{ "constraintStatus": { object ( |
Alanlar | |
---|---|
constraintStatus |
Kısıtlamaya dayalı durum. Gereksinimler: * restrictionStatus.id, LinearConstraints.id değerine eşittir. |
variableStatus |
Değişken temel durumu. Gereksinimler: * RestrictStatus.id, VariablesProto.id'ye eşittir. |
basicDualFeasibility |
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. |
SparseBasisStatusVector
Taban durumları vektörünün seyrek temsili.
JSON gösterimi |
---|
{
"ids": [
string
],
"values": [
enum ( |
Alanlar | |
---|---|
ids[] |
Tüm öğeler farklı olacak şekilde (artan düzende) sıralanmalıdır. |
values[] |
Kimliklere eşit uzunlukta olmalıdır. |
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. |
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. |
SolutionHintProto
Çözücü için önerilen bir başlangıç çözümü.
MIP çözücüler genellikle yalnızca asal bilgi (variableValues
) isterken LP çözücüler hem asal hem de çift bilgi (dualValues
) 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).
JSON gösterimi |
---|
{ "variableValues": { object ( |
Alanlar | |
---|---|
variableValues |
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: * variableValues.ids, VariablesProto.id öğelerinin öğeleridir. * variableValues.values’ın tümü sonlu olmalıdır. |
dualValues |
Değerlerin, problemin doğrusal kısıtlamalarına (potansiyel olarak kısmi) atanması. Gereksinimler: * dualValues.id, LinearConstraintsProto.id öğelerinin öğeleridir. * dualValues.values'ın tümü sonlu olmalıdır. |
SparseInt32VectorProto
Tam sayı vektörünün seyrek temsili.
JSON gösterimi |
---|
{ "ids": [ string ], "values": [ integer ] } |
Alanlar | |
---|---|
ids[] |
Tüm öğeler farklı olacak şekilde (artan düzende) sıralanmalıdır. |
values[] |
Kimliklere eşit uzunlukta olmalıdır. |
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.
JSON gösterimi |
---|
{ "termination": { object ( |
Alanlar | |
---|---|
termination |
Çözücünün durma nedeni. |
solutions[] |
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. |
primalRays[] |
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 |
dualRays[] |
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. |
solveStats |
Çözme süreciyle ilgili istatistikler, ör. çalıştırma süresi, yinelemeler. |
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 |
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 |
Kapatma işlemiyle ilgili genellikle çözücüye özgü ek bilgiler. |
problemStatus |
Temel ve ikili problemlerin uygulanabilirlik durumları. 18 Temmuz 2023'ten itibaren bu mesaj görünmüyor olabilir. Eksikse, problemStatus, SolveResultProto.solve_stats içinde bulunabilir. |
objectiveBounds |
Optimum hedef değerine göre sınırlanır. 18 Temmuz 2023'ten itibaren bu mesaj görünmüyor olabilir. Eksikse, HedefBounds.primal_bound SolveResultProto.solve.stats.best_primal_bound ve hedefBounds.dual_bound 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ı solStats.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. |
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. |
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.
JSON gösterimi |
---|
{ "primalStatus": enum ( |
Alanlar | |
---|---|
primalStatus |
Asal problemin durumu. |
dualStatus |
İkili problem (veya sürekli gevşeme ikilisi) için durum. |
primalOrDualInfeasible |
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. |
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. |
ObjectiveBoundsProto
Optimum hedef değerine göre sınırlanır.
JSON gösterimi |
---|
{ "primalBound": number, "dualBound": number } |
Alanlar | |
---|---|
primalBound |
Çözücü, optimum değerin, çözücülerin birincil fizibilite toleransına kadar olan primalBound'a eşit veya daha iyi (küçültme için daha küçük ve maksimum değer için daha büyük) olduğunu iddia eder (aşağıdaki uyarıya bakın): * Çözücü bu bir sınıra sahip olduğunu iddia etmediğinde primalBound önemsizdir (+küçültme için +inf ve -inf maksimizasyon). * primalBound 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 primalBound önemsiz olmayabilir. Uyarı: Tam iddia, * sayısal olarak uygulanabilir (yani çözücü toleransına kadar uygulanabilir) ve * objektif değeri primalBound olan bir temel çözüm olduğudur. Sayısal açıdan uygulanabilir olan bu çözüm biraz uygulanabilir olmaz, bu durumda primalBound optimum değerden kesinlikle daha iyi olabilir. Özellikle fizibilite toleransı nispeten büyük olduğunda (ör. PDLP ile çözerken) primal fizibilite toleransının primalBound üzerindeki bir toleransa dönüştürülmesi çok önemlidir. |
dualBound |
Çözücü, optimum değerin, çözücülerin ikili fizibilite toleransına kadar dualBound'a eşit veya daha kötü (en aza indirme için daha büyük ve maksimum için daha küçük) olduğunu iddia eder (aşağıdaki uyarıya bakın): * Çözücü bu tür bir sınıra sahip olduğunu iddia etmediğinde dualBound önemsizdir (küçültme için -inf ve +inf maksimizasyonu). Bu durum, primalBound'a benzer şekilde, optimum çözerken bile bazı çözücülerde görülebilir. MIP çözücüler, kesin olmayan bile olsa genellikle sınır rapor eder. * Sürekli problemlerde dualBound, en iyi ikili çözümün hedefinden daha uygun değere daha yakın olabilir. MIP için dualBound'un ilk önemsiz olmayan 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 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 * dualBound nesnel değerine sahiptir. Sayısal açıdan uygulanabilir olan bu çözüm biraz olanaksız olabilir. Bu durumda, dualBound ideal değerden ve primalBound'dan kesinlikle daha kötü olabilir. İlkel duruma benzer şekilde, özellikle fizibilite toleransı nispeten büyük olduğunda, ikili fizibilite toleransının dualBound üzerindeki bir toleransa dönüştürülmesi önemsiz değildir. Ancak bazı çözücüler, dualBound'un 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 dualBound, bir miktar sürekli gevşeme (ör. LP gevşetme) için ikili bir çözümle ilişkilendirilebilir ancak genelde çö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. |
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.
JSON gösterimi |
---|
{ "primalSolution": { object ( |
Alanlar | |
---|---|
primalSolution |
|
dualSolution |
|
basis |
|
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,variableValues x, hedefDeğer değeri ise c * x’tir.
JSON gösterimi |
---|
{ "variableValues": { object ( |
Alanlar | |
---|---|
variableValues |
Gereksinimler: * variableValues.ids, VariablesProto.id öğelerinin öğeleridir. * variableValues.values’ın 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 hesaplanan yardımcı hedef değerleri. Anahtarlar geçerli 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 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 dualValues, r azaltılmışMaliyetler, b * y ise nesnel değerdir.
JSON gösterimi |
---|
{ "dualValues": { object ( |
Alanlar | |
---|---|
dualValues |
Gereksinimler: * dualValues.id, DoğrusalConstraints.id öğelerinin öğeleridir. * dualValues.values'ın tümü sonlu olmalıdır. |
reducedCosts |
Gereksinimler: * lowCosts.id , VariablesProto.id öğelerinin öğeleridir. * downCosts.values'ın tümü sonlu olmalıdır. |
feasibilityStatus |
Temel çözücüye göre çözümün uygulanabilirlik durumu. |
objectiveValue |
|
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ındavariableValues x'tir.
JSON gösterimi |
---|
{
"variableValues": {
object ( |
Alanlar | |
---|---|
variableValues |
Gereksinimler: * variableValues.ids, VariablesProto.id öğelerinin öğeleridir. * variableValues.values’ın tümü sonlu olmalıdır. |
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 dualValues, r ise azaltılmışMaliyettir.
JSON gösterimi |
---|
{ "dualValues": { object ( |
Alanlar | |
---|---|
dualValues |
Gereksinimler: * dualValues.id, DoğrusalConstraints.id öğelerinin öğeleridir. * dualValues.values'ın tümü sonlu olmalıdır. |
reducedCosts |
Gereksinimler: * lowCosts.id , VariablesProto.id öğelerinin öğeleridir. * downCosts.values'ın tümü sonlu olmalıdır. |
SolveStatsProto
JSON gösterimi |
---|
{
"solveTime": string,
"problemStatus": {
object ( |
Alanlar | |
---|---|
solveTime |
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. " |
problemStatus |
Temel ve ikili problemlerin uygulanabilirlik durumları. |
simplexIterations |
|
barrierIterations |
|
firstOrderIterations |
|
nodeCount |
|