Method: mathopt.solveMathOptModel

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 (SolverTypeProto),
  "model": {
    object (ModelProto)
  },
  "parameters": {
    object (SolveParametersProto)
  },
  "modelParameters": {
    object (ModelSolveParametersProto)
  }
}
Alanlar
solverType

enum (SolverTypeProto)

İ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

object (ModelProto)

Zorunlu. Çözülecek optimizasyon probleminin matematiksel temsili.

parameters

object (SolveParametersProto)

İ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

object (ModelSolveParametersProto)

İ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 (SolveResultProto)
  },
  "messages": [
    string
  ]
}
Alanlar
result

object (SolveResultProto)

İstekteki modeli çözme işleminin sonucuyla ilgili açıklama.

messages[]

string

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 (VariablesProto)
  },
  "objective": {
    object (ObjectiveProto)
  },
  "auxiliaryObjectives": {
    string: {
      object (ObjectiveProto)
    },
    ...
  },
  "linearConstraints": {
    object (LinearConstraintsProto)
  },
  "linearConstraintMatrix": {
    object (SparseDoubleMatrixProto)
  },
  "quadraticConstraints": {
    string: {
      object (QuadraticConstraintProto)
    },
    ...
  },
  "secondOrderConeConstraints": {
    string: {
      object (SecondOrderConeConstraintProto)
    },
    ...
  },
  "sos1Constraints": {
    string: {
      object (SosConstraintProto)
    },
    ...
  },
  "sos2Constraints": {
    string: {
      object (SosConstraintProto)
    },
    ...
  },
  "indicatorConstraints": {
    string: {
      object (IndicatorConstraintProto)
    },
    ...
  }
}
Alanlar
name

string

variables

object (VariablesProto)

objective

object (ObjectiveProto)

Modeldeki birincil hedef.

auxiliaryObjectives

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

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

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

"key": value çiftlerin listesini içeren bir nesne. Örnek: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

linearConstraints

object (LinearConstraintsProto)

linearConstraintMatrix

object (SparseDoubleMatrixProto)

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

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

Gereksinimler: * 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

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

Modeldeki ikinci dereceden kısıtlamalar.

"key": value çiftlerin listesini içeren bir nesne. Örnek: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

secondOrderConeConstraints

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

Modeldeki ikinci derece koni kısıtlamaları.

"key": value çiftlerin listesini içeren bir nesne. Örnek: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

sos1Constraints

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

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

"key": value çiftlerin listesini içeren bir nesne. Örnek: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

sos2Constraints

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

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

"key": value çiftlerin listesini içeren bir nesne. Örnek: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

indicatorConstraints

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

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

"key": value çiftlerin listesini içeren bir nesne. Örnek: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

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[]

string (int64 format)

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

lowerBounds[]

number

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

upperBounds[]

number

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

integers[]

boolean

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

names[]

string

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

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

ObjectiveProto

JSON gösterimi
{
  "maximize": boolean,
  "offset": number,
  "linearCoefficients": {
    object (SparseDoubleVectorProto)
  },
  "quadraticCoefficients": {
    object (SparseDoubleMatrixProto)
  },
  "name": string,
  "priority": string
}
Alanlar
maximize

boolean

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

offset

number

NaN değil sonlu olmalıdır.

linearCoefficients

object (SparseDoubleVectorProto)

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

object (SparseDoubleMatrixProto)

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

string

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

priority

string (int64 format)

Ç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[]

string (int64 format)

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

values[]

number

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[]

string (int64 format)

columnIds[]

string (int64 format)

coefficients[]

number

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[]

string (int64 format)

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

lowerBounds[]

number

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

upperBounds[]

number

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

names[]

string

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

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

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 (SparseDoubleVectorProto)
  },
  "quadraticTerms": {
    object (SparseDoubleMatrixProto)
  },
  "lowerBound": number,
  "upperBound": number,
  "name": string
}
Alanlar
linearTerms

object (SparseDoubleVectorProto)

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

object (SparseDoubleMatrixProto)

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

number

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

upperBound

number

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

name

string

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

SecondOrderConeConstraintProto

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

||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 (LinearExpressionProto)
  },
  "argumentsToNorm": [
    {
      object (LinearExpressionProto)
    }
  ],
  "name": string
}
Alanlar
upperBound

object (LinearExpressionProto)

argumentsToNorm[]

object (LinearExpressionProto)

name

string

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

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[]

string (int64 format)

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

coefficients[]

number

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

offset

number

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 (LinearExpressionProto)
    }
  ],
  "weights": [
    number
  ],
  "name": string
}
Alanlar
expressions[]

object (LinearExpressionProto)

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

weights[]

number

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

name

string

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

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 (SparseDoubleVectorProto)
  },
  "lowerBound": number,
  "upperBound": number,
  "name": string,
  "indicatorId": string
}
Alanlar
activateOnZero

boolean

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

object (SparseDoubleVectorProto)

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

lowerBound

number

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

upperBound

number

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

name

string

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

indicatorId

string (int64 format)

İ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 (LPAlgorithmProto),
  "presolve": enum (EmphasisProto),
  "cuts": enum (EmphasisProto),
  "heuristics": enum (EmphasisProto),
  "scaling": enum (EmphasisProto),
  "iterationLimit": string,
  "nodeLimit": string,
  "cutoffLimit": number,
  "objectiveLimit": number,
  "bestBoundLimit": number,
  "solutionLimit": integer,
  "threads": integer,
  "randomSeed": integer,
  "absoluteGapTolerance": number,
  "relativeGapTolerance": number,
  "solutionPoolSize": integer
}
Alanlar
timeLimit

string (Duration format)

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.

"s" ile biten ve en fazla dokuz kesir basamağı olan, saniye cinsinden bir süre. Örnek: "3.5s".

enableOutput

boolean

Çö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

enum (LPAlgorithmProto)

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

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

presolve

enum (EmphasisProto)

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

cuts

enum (EmphasisProto)

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

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

heuristics

enum (EmphasisProto)

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

scaling

enum (EmphasisProto)

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

iterationLimit

string (int64 format)

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

string (int64 format)

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

number

Çö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

number

Çö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

number

Çö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

integer

Çö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

integer

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

randomSeed

integer

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

number

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

number

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

integer

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

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

object (SparseVectorFilterProto)

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

object (SparseVectorFilterProto)

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

Gereksinimler: * filterId'ler LinearConstraints.id öğelerinin öğeleridir.

reducedCostsFilter

object (SparseVectorFilterProto)

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

Gereksinimler: * filterId'ler VariablesProto.id öğelerinin öğeleridir.

initialBasis

object (BasisProto)

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

solutionHints[]

object (SolutionHintProto)

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

branchingPriorities

object (SparseInt32VectorProto)

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

Gereksinimler: * 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

boolean

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

filterByIds

boolean

Doğru olduğunda, yalnızca filtrelenmiş kimliklerde listelenen kimliklere karşılık gelen değerleri döndürür.

filteredIds[]

string (int64 format)

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 (SparseBasisStatusVector)
  },
  "variableStatus": {
    object (SparseBasisStatusVector)
  },
  "basicDualFeasibility": enum (SolutionStatusProto)
}
Alanlar
constraintStatus

object (SparseBasisStatusVector)

Kısıtlamaya dayalı durum.

Gereksinimler: * restrictionStatus.id, LinearConstraints.id değerine eşittir.

variableStatus

object (SparseBasisStatusVector)

Değişken temel durumu.

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

basicDualFeasibility

enum (SolutionStatusProto)

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

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

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

SparseBasisStatusVector

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

JSON gösterimi
{
  "ids": [
    string
  ],
  "values": [
    enum (BasisStatusProto)
  ]
}
Alanlar
ids[]

string (int64 format)

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

values[]

enum (BasisStatusProto)

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 (SparseDoubleVectorProto)
  },
  "dualValues": {
    object (SparseDoubleVectorProto)
  }
}
Alanlar
variableValues

object (SparseDoubleVectorProto)

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

dualValues

object (SparseDoubleVectorProto)

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[]

string (int64 format)

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

values[]

integer

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 (TerminationProto)
  },
  "solutions": [
    {
      object (SolutionProto)
    }
  ],
  "primalRays": [
    {
      object (PrimalRayProto)
    }
  ],
  "dualRays": [
    {
      object (DualRayProto)
    }
  ],
  "solveStats": {
    object (SolveStatsProto)
  }
}
Alanlar
termination

object (TerminationProto)

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

solutions[]

object (SolutionProto)

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

primalRays[]

object (PrimalRayProto)

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

dualRays[]

object (DualRayProto)

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

solveStats

object (SolveStatsProto)

Çö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 (TerminationReasonProto),
  "limit": enum (LimitProto),
  "detail": string,
  "problemStatus": {
    object (ProblemStatusProto)
  },
  "objectiveBounds": {
    object (ObjectiveBoundsProto)
  }
}
Alanlar
reason

enum (TerminationReasonProto)

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

limit

enum (LimitProto)

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

detail

string

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

problemStatus

object (ProblemStatusProto)

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

object (ObjectiveBoundsProto)

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 (FeasibilityStatusProto),
  "dualStatus": enum (FeasibilityStatusProto),
  "primalOrDualInfeasible": boolean
}
Alanlar
primalStatus

enum (FeasibilityStatusProto)

Asal problemin durumu.

dualStatus

enum (FeasibilityStatusProto)

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

primalOrDualInfeasible

boolean

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

number

Çö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

number

Çö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 (PrimalSolutionProto)
  },
  "dualSolution": {
    object (DualSolutionProto)
  },
  "basis": {
    object (BasisProto)
  }
}
Alanlar
primalSolution

object (PrimalSolutionProto)

dualSolution

object (DualSolutionProto)

basis

object (BasisProto)

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 (SparseDoubleVectorProto)
  },
  "objectiveValue": number,
  "auxiliaryObjectiveValues": {
    string: number,
    ...
  },
  "feasibilityStatus": enum (SolutionStatusProto)
}
Alanlar
variableValues

object (SparseDoubleVectorProto)

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

objectiveValue

number

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

auxiliaryObjectiveValues

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

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.

"key": value çiftlerin listesini içeren bir nesne. Örnek: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

feasibilityStatus

enum (SolutionStatusProto)

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 (SparseDoubleVectorProto)
  },
  "reducedCosts": {
    object (SparseDoubleVectorProto)
  },
  "feasibilityStatus": enum (SolutionStatusProto),
  "objectiveValue": number
}
Alanlar
dualValues

object (SparseDoubleVectorProto)

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

reducedCosts

object (SparseDoubleVectorProto)

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

feasibilityStatus

enum (SolutionStatusProto)

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

objectiveValue

number

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 (SparseDoubleVectorProto)
  }
}
Alanlar
variableValues

object (SparseDoubleVectorProto)

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 (SparseDoubleVectorProto)
  },
  "reducedCosts": {
    object (SparseDoubleVectorProto)
  }
}
Alanlar
dualValues

object (SparseDoubleVectorProto)

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

reducedCosts

object (SparseDoubleVectorProto)

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

SolveStatsProto

JSON gösterimi
{
  "solveTime": string,
  "problemStatus": {
    object (ProblemStatusProto)
  },
  "simplexIterations": string,
  "barrierIterations": string,
  "firstOrderIterations": string,
  "nodeCount": string
}
Alanlar
solveTime

string (Duration format)

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.

"s" ile biten ve en fazla dokuz kesir basamağı olan, saniye cinsinden bir süre. Örnek: "3.5s".

problemStatus

object (ProblemStatusProto)

Temel ve ikili problemlerin uygulanabilirlik durumları.

simplexIterations

string (int64 format)

barrierIterations

string (int64 format)

firstOrderIterations

string (int64 format)

nodeCount

string (int64 format)