Method: mathopt.solveMathOptModel

Giriş modelini çözer ve sonucu tek seferde döndürür. Geri çağırmaya ve artımlılığa ihtiyacınız olmadığında ve bir çözümün ilerlemesini izlemeniz gerekmediğinde bunu kullanın.

HTTP isteği

POST https://optimization.googleapis.com/v1/mathopt:solveMathOptModel

URL, gRPC Kod Dönüştürme söz dizimini kullanır.

İstek içeriği

İstek gövdesi, aşağıdaki yapıya sahip verileri içerir:

JSON gösterimi
{
  "solverType": enum (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ü türü. Çözücü, modeldeki belirli bir özelliği desteklemiyorsa optimizasyon prosedürünün 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 etmek için kullanılan parametreler. allowÇıkış parametresi özel olarak işlenir. İleti geri çağırmalarını destekleyen çözücüler için bu değeri doğru olarak ayarlamak sunucunun bir ileti geri çağırması kaydetmesini sağlar. Ortaya çıkan mesajlar, SolveMathOptModelResponse.messages içinde döndürülür. Diğer çözücüler için allowExit'in doğru değerine ayarlanması hatayla sonuçlanır.

modelParameters

object (ModelSolveParametersProto)

İsteğe bağlı. Giriş modeline özel tek bir çözme işlemini kontrol etmek için kullanılan parametreler (Modelden bağımsız parametreler için SolveParametersProto'ya bakın).

Yanıt gövdesi

MathOpt'te tekli uzaktan çözme yanıtı.

Başarılı olursa yanıt metni aşağıdaki yapıyla birlikte verileri içerir:

JSON gösterimi
{
  "result": {
    object (SolveResultProto)
  },
  "messages": [
    string
  ]
}
Alanlar
result

object (SolveResultProto)

İstekteki model çözümleme çıktısının açıklaması.

messages[]

string

SolveParametersProto.enable_Exit kullanıldıysa, mesaj geri çağırmalarını destekleyen çözücülere ilişkin günlük mesajlarını içerir.

SolverTypeProto

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

Sıralamalar
SOLVER_TYPE_UNSPECIFIED
SOLVER_TYPE_GSCIP

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

LP, MIP ve dışbükey olmayan tam sayı ikinci dereceden problemleri destekler. Ancak LP'ler için çift veri döndürülmez. LP'ler için GLOP'u tercih edin.

SOLVER_TYPE_GUROBI

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

LP, MIP ve dışbükey olmayan tam sayı ikinci dereceden problemleri destekler. Genel olarak en hızlı seçenektir ancak özel lisanslamaya sahiptir.

SOLVER_TYPE_GLOP

Google'ın Yerküre çözücüsü.

LP'yi primal ve çift tek yönlü yöntemlerle destekler.

SOLVER_TYPE_CP_SAT

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

Tüm değişkenlerin tam sayı ve sınırlı olduğu (veya p çözümlemeden sonra olduğu ima edilen) problemleri destekler. Sürekli değişkenlerle problemleri yeniden ölçeklendirmek ve ayırt etmek için deneysel destek.

SOLVER_TYPE_PDLP

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

LP ve dışbükey çapraz çapraz hedefleri destekler. Basit yerine birinci dereceden yöntemler kullanır. Çok büyük sorunları çözebilir.

SOLVER_TYPE_GLPK

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

MIP ve LP'yi destekler.

İş parçacığı güvenliği: GLPK, bellek ayırmaları için iş parçacığı yerel depolama alanını kullanır. Sonuç olarak, Çözümleyici örnekleri oluşturuldukları andan itibaren aynı iş parçacığında yok edilmelidir. Aksi takdirde, GLPK çöker. Çözümleyiciyi oluşturmak için kullanılan iş parçacığı yerine başka bir iş parçacığında Solver::Solve() çağrısı yapılabilir, ancak bu çağrı GLPK tarafından belgelenmemiştir ve bundan kaçınılmalıdır.

Çözümleyiciyle bir LP'yi çözerken çözüm (ve bağlanmayan ışınlar) yalnızca en iyi çözüm bulunduğunda döndürülür. Aksi takdirde hiçbir şey döndürülmez. Ayrıntılı bilgi için glpk-5.0.tar.gz adresindeki glpk-5.0/doc/glpk.pdf sayfa #40'a göz atın.

SOLVER_TYPE_OSQP

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

Doğrusal kısıtlamalar ve doğrusal veya dışbükey ikinci dereceden hedefler içeren sürekli problemleri destekler. Birinci dereceden bir yöntem kullanır.

SOLVER_TYPE_ECOS

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

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

SOLVER_TYPE_SCS

Splitting Conic Solver (SCS) (üçüncü taraf).

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

SOLVER_TYPE_HIGHS

HiGHS Solver (üçüncü taraf).

LP ve MIP sorunlarını destekler (Dışbükey QP'ler uygulanmaz).

SOLVER_TYPE_SANTORINI

MathOpt'un bir MIP çözücüye ilişkin referans uygulaması.

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

ModelProto

Bir optimizasyon sorunu. MathOpt şunları destekler: - İsteğe bağlı sonlu sınırları olan sürekli ve tam sayı karar değişkenleri. - Küçültülmüş veya büyütülmüş, doğrusal ve ikinci dereceden hedefler (tek ya da birden çok hedef). - Aşağıdakiler dahil olmak üzere çeşitli sınırlama türleri: * Doğrusal kısıtlamalar * İkinci dereceden kısıtlamalar * İkinci derece koni kısıtlamaları * Mantıksal kısıtlamalar > SOS1 ve SOS2 kısıtlamaları > Gösterge kısıtlamaları

Kısıtlamalar varsayılan olarak "id-to-data" şeklinde gösterilir. haritalar. Ancak doğrusal kısıtlamaları daha verimli bir "dizi yapısı"nda temsil ederiz. biçimindedir.

JSON gösterimi
{
  "name": string,
  "variables": {
    object (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ım için yardımcı hedefler.

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

"key": value çiftlerinin 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ır olarak ayarlanmış gibi kabul edilir.

Gereksinimler: * DoğrusalConstraintMatrix.row_ids, DoğrusalConstraints.ids elemanlarıdır. * DoğrusalConstraintMatrix.column_ids, değişkenleri.ids'in öğeleridir. * Belirtilmeyen matris girişleri sıfırdır. * DoğrusalConstraintMatrix.değerlerinin tümü sonlu olmalıdır.

quadraticConstraints

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

Modeldeki ikinci dereceden kısıtlamalar.

"key": value çiftlerinin 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 çiftlerinin listesini içeren bir nesne. Örnek: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

sos1Constraints

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

Modelde en fazla bir expression değerinin sıfır dışında olabileceğini sınırlayan SOS1 kısıtlamaları var. İsteğe bağlı weights girişleri, çözücü tarafından (umarız) daha hızlı birleşmek için kullanılan bir uygulama ayrıntısıdır. Daha ayrıntılı olarak, çözücüler "dengeli" sonuç veren kollara ayırma kararlarını seçmek için bu ağırlıkları kullanabilir (veya kullanmayabilir) alt düğümler bulunur.

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

sos2Constraints

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

Modelde SOS2 kısıtlamaları, expression girişlerinden en fazla iki tanesinin sıfır dışında bir değer olabileceğini ve sıralamalarında bitişik olmalıdır. Herhangi bir weights sağlanmazsa bu sıralama, expressions listesindeki doğrusal sıralamalarıdır; weights sunulursa sıralama, bu değerlere göre artan sırayla alınır.

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

indicatorConstraints

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

Modelde ikili bir "gösterge değişkeni" varsa bunu zorunlu kılan gösterge kısıtlamaları değeri bir olarak ve ardından "ima edilen kısıtlama" tutması gerekir.

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

VariablesProto

Aşağıda kullanıldığı gibi, "#değişkenler"i tanımlarız = size(VariablesProto.ids).

JSON gösterimi
{
  "ids": [
    string
  ],
  "lowerBounds": [
    number
  ],
  "upperBounds": [
    number
  ],
  "integers": [
    boolean
  ],
  "names": [
    string
  ]
}
Alanlar
ids[]

string (int64 format)

Negatif olmamalı ve kesinlikle artan bir değer olmalıdır. max(int64) değeri kullanılamıyor.

lowerBounds[]

number

Uzunluk #variables, değerleri [-inf, inf) olmalıdır.

upperBounds[]

number

Uzunluk #variables, (-inf, inf] içindeki değerler) olmalıdır.

integers[]

boolean

Uzunluk #variables değerine eşit olmalıdır. Sürekli değişkenler için değer false, tamsayı değişkenler için doğrudur.

names[]

string

Politika ayarlanmazsa tüm boş dizeler olduğu varsayılır. Aksi takdirde, uzunluk değeri #variables değerine eşit olmalıdır.

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

ObjectiveProto

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

boolean

yanlış ise en aza indirgenir, doğru ise en üst düzeye çıkarır

offset

number

NaN değil, sonlu olmalıdır.

linearCoefficients

object (SparseDoubleVectorProto)

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

Gereksinimler: * doğrusalCo gölges.ids, VariablesProto.ids'nin öğeleridir. * VariablesProto belirtilmeyenler sıfıra karşılık gelir. * Doğrusal Katsayılar.değerleri sonlu olmalıdır. * Doğrusal Katsayılar.değerler sıfır olabilir, ancak bu durumda alan boşa harcanır.

quadraticCoefficients

object (SparseDoubleMatrixProto)

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

SparseDoubleClickMatrixProto mesajlarındakilere ek olarak gereksinimler: * İkinci dereceden katsayılar.row_ids'nin her öğesi ve ikinci dereceden katsayılar.sütun_kimlikleri öğesinin her öğesi, Değişkenler Protokolleri'nin bir öğesi olmalıdır. * Matris, üst üçgen olmalıdır: her i için ikinci dereceden katsayılar.satır_kimlikleri[i] <= ikinci dereceden katsayılar.sütun_kimlikleri[i].

Notlar: * Açıkça depolanmayan terimlerin katsayısı sıfırdır. * İkinci dereceden katsayılar.katsayıların elemanları sıfır olabilir, ancak bu durumda alan boşa harcanır.

name

string

Üst mesajlar için bu alanda benzersizlik koşulları olabilir; Ör. ModelProto.objectives ve AuxiliaryObjectivesUpdatesProto.new_objectives öğelerine bakın.

priority

string (int64 format)

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

SparseDoubleVectorProto

Çiftler vektörünün seyrek gösterimi.

JSON gösterimi
{
  "ids": [
    string
  ],
  "values": [
    number
  ]
}
Alanlar
ids[]

string (int64 format)

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

values[]

number

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

SparseDoubleMatrixProto

Çiftler matrisinin seyrek gösterimi.

Matris; satır kimliği, sütun kimliği ve katsayının üç katı olarak depolanır. Bu üç vektör eşit uzunlukta olmalıdır. Tüm i için delik (rowIds[i], columnIds[i]) farklı olmalıdır. Girişler satır majör sırada olmalıdır.

JSON gösterimi
{
  "rowIds": [
    string
  ],
  "columnIds": [
    string
  ],
  "coefficients": [
    number
  ]
}
Alanlar
rowIds[]

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).

JSON gösterimi
{
  "ids": [
    string
  ],
  "lowerBounds": [
    number
  ],
  "upperBounds": [
    number
  ],
  "names": [
    string
  ]
}
Alanlar
ids[]

string (int64 format)

Negatif olmamalı ve kesinlikle artan bir değer olmalıdır. max(int64) değeri kullanılamıyor.

lowerBounds[]

number

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

upperBounds[]

number

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

names[]

string

Politika ayarlanmazsa tüm boş dizeler olduğu varsayılır. Aksi takdirde, uzunluk #doğrusal kısıtlamalara eşit olmalıdır.

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

QuadraticConstraintProto

Şu biçimde tek bir ikinci dereceden kısıt: lb <= sum{ Güneşli Şartlar} + sum{kadratik Terimleri} <= ub.

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

JSON gösterimi
{
  "linearTerms": {
    object (SparseDoubleVectorProto)
  },
  "quadraticTerms": {
    object (SparseDoubleMatrixProto)
  },
  "lowerBound": number,
  "upperBound": number,
  "name": string
}
Alanlar
linearTerms

object (SparseDoubleVectorProto)

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

SparseDoubleClickVectorProto mesajlarındaki koşullara ek olarak şu şartı da yerine getirmemiz gerekiyor: * DoğrusalTerimler.ids, VariablesProto.ids'in öğeleridir. * doğrusalTerimler.değerleri sonlu olmalı, NaN olmamalıdır.

Notlar: * Çıkarılan değişken kimliklerinin katsayısı sıfırdır. * doğrusalTerimler.değerleri sıfır olabilir, ancak bu durumda boşa harcanır.

quadraticTerms

object (SparseDoubleMatrixProto)

Karar değişkenlerinde ikinci dereceden olan terimler.

SparseDoubleClickMatrixProto mesajlarındaki şartlara ek olarak şu şartı da yerine getirmemiz gerekir: * quadraticterms.row_ids öğesinin her öğesi ve quadraticTERMS.column_ids öğesinin her bir öğesi, VariablesProto.ids öğesinin bir öğesi olmalıdır. * Matris, üst üçgen olmalıdır: her i için quadraticterms.row_ids[i] <= quadraticterms.column_ids[i].

Notlar: * Açıkça depolanmayan terimlerin katsayısı sıfırdır. * İkinci dereceden Terimler.katsayıları'nın öğeleri sıfır olabilir, ancak bu durumda alan boşa harcanır.

lowerBound

number

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

upperBound

number

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

name

string

Üst mesajlar için bu alanda benzersizlik koşulları olabilir; Ör. ModelProto.quadratic_restrictedts ve QuadraticConstraintUpdatesProto.new_Restrictts bölümlerine bakın.

SecondOrderConeConstraintProto

Şu biçimde tek bir ikinci derece koni kısıtlaması:

||argumentsToNorm||_2 <= upperBound,

Burada upperBound ve her bir argumentsToNorm öğesi doğrusal ifadelerdir.

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

JSON gösterimi
{
  "upperBound": {
    object (LinearExpressionProto)
  },
  "argumentsToNorm": [
    {
      object (LinearExpressionProto)
    }
  ],
  "name": string
}
Alanlar
upperBound

object (LinearExpressionProto)

argumentsToNorm[]

object (LinearExpressionProto)

name

string

Üst mesajlar için bu alanda benzersizlik koşulları olabilir; Örneğin, bkz. ModelProto.second_order_cone_constraints ve SecondOrderConeConstraintUpdatesProto.new_constraints.

LinearExpressionProto

Doğrusal bir ifadenin seyrek gösterimi (değişkenlerin ağırlıklı toplamı ve sabit bir ofset).

JSON gösterimi
{
  "ids": [
    string
  ],
  "coefficients": [
    number
  ],
  "offset": number
}
Alanlar
ids[]

string (int64 format)

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

coefficients[]

number

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

offset

number

Sonlu olmalıdır ve NaN olmayabilir.

SosConstraintProto

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

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

JSON gösterimi
{
  "expressions": [
    {
      object (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 dışında bir değer alır. * SOS2: En fazla iki öğe sıfır dışında değer alır ve tekrarlanan sıralamada bitişik olmalıdır.

weights[]

number

Boş veya ifadelere eşit uzunluktaki öğeler. Boşsa varsayılan ağırlıklar 1, 2 ve ... olur. Varsa girişler benzersiz olmalıdır.

name

string

Üst mesajlar için bu alanda benzersizlik koşulları olabilir; Ör. ModelProto.sos1_Restrictts ve SosConstraintUpdatesProto.new_Restrictts bölümlerine bakın.

IndicatorConstraintProto

Şu biçimdeki tek bir gösterge kısıtlamasını temsil eden veriler: Variable(indicatorId) = (activateOnZero ? 0 : 1) 🎃 altBound <= ifade <= üstBound.

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

JSON gösterimi
{
  "activateOnZero": boolean,
  "expression": {
    object (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 takdirde, gösterge değişkeni 1 değerini alırsa, ima edilen sınırlama geçerli olmalıdır.

expression

object (SparseDoubleVectorProto)

Kapsayıcı modelle ilgili olarak geçerli bir doğrusal ifade olmalıdır: * SparseDoubleVectorProto için belirtilen tüm koşullar, * expression.values işlevinin tüm öğeleri sonlu olmalıdır, * expression.ids, VariablesProto.ids alt kümesidir.

lowerBound

number

[-inf, inf); değeri olmalıdır; NaN olamaz.

upperBound

number

(-inf, inf] cinsinden değer içermelidir; NaN olamaz.

name

string

Üst mesajlar için bu alanda benzersizlik koşulları olabilir; Örneğin, bkz. ModelProto.indicator_constraints ve IndicatorConstraintUpdatesProto.new_constraints.

indicatorId

string (int64 format)

İkili değişkene karşılık gelen veya ayarlanmamış kimlik. Politika ayarlanmazsa gösterge kısıtlaması yok sayılır. Ayarlanırsa şu şartı zorunlu kılarız: * VariablesProto.integers[indicatorId] = true, * VariablesProto.lower_bounds[indicatorId] >= 0, * VariablesProto.upper_bounds[indicatorId] <= 1. Bu koşullar MathOpt tarafından doğrulanmaz, ancak karşılanmazsa çözücünün çözüldüğünde hata döndürmesine neden olur.

SolveParametersProto

Tek bir çözümü kontrol etmek için kullanılan parametreler.

Tüm çözücüler için ortak olan her iki parametreyi de içerir, ör. timeLimit ve belirli bir çözücüye ait parametreler, ör. gscip. Bir değer hem ortak hem de çözücüye özel alanda ayarlanırsa çözücüye özel ayar kullanılır.

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

Kullanılan dışındaki çözücülere özel çözme parametreleri yoksayılır.

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

JSON gösterimi
{
  "timeLimit": string,
  "enableOutput": boolean,
  "lpAlgorithm": enum (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)

Çözücünün problem üzerinde harcayacağı maksimum süre (ya da ayarlanmamışsa sonsuz).

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

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

enableOutput

boolean

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

Çözücü, mesaj geri çağırma özelliğini destekliyorsa ve kullanıcı bunun için bir geri çağırma kaydederse bu parametre değerinin yoksayılacağını ve hiçbir iz yazdırılmayacağını unutmayın.

lpAlgorithm

enum (LPAlgorithmProto)

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

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

presolve

enum (EmphasisProto)

Ana algoritmaya başlamadan önce problemi basitleştirmeye çalışın veya EMPHASIS_UNSPECIFIED ise problem çözücünün varsayılan çaba seviyesi.

cuts

enum (EmphasisProto)

Daha güçlü bir LP gevşetme düzeyini (yalnızca MIP) veya çözücü varsayılan çaba düzeyini (EMPHASIS_UNSPECIFIED) elde etmeye çalışın.

NOT: Kesmelerin devre dışı bırakılması, geri çağırmaların MIP_NODE'da kesme ekleme imkanının olmasını engelleyebilir. Bu davranış, çözücüye özgüdür.

heuristics

enum (EmphasisProto)

Arama prosedürünün tamamında karşılaşılanların (yalnızca MIP) veya EMPHASIS_UNSPECIFIED ise çözücünün varsayılan çaba düzeyinin dışında uygulanabilir çözümler bulmaya yönelik çaba.

scaling

enum (EmphasisProto)

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

iterationLimit

string (int64 format)

Temel algoritmanın iterasyonlarını sınırlandırma (ör. tek yönlü pivotlar). Belirli davranış, çözücüye ve kullanılan algoritmaya bağlıdır ancak genellikle deterministik bir çözme sınırı verebilir (ör. bir iş parçacığı gibi daha fazla yapılandırma gerekebilir).

Tipik olarak LP, QP ve MIP çözücüler tarafından desteklenir ancak MIP çözücüler için de nodeLimit öğesine bakın.

nodeLimit

string (int64 format)

Numaralı aramada çözülen alt problemlerin sayısına yönelik sınırlama (ör. dal ve sınır). Birçok çözücü için bu, hesaplamayı belirleyici olarak sınırlamak için kullanılabilir (daha fazla yapılandırma gerekebilir, ör. bir iş parçacığı).

Genellikle MIP çözücüler için iterationLimit öğesine de bakın.

cutoffLimit

number

Çözücü, en az kesme kadar iyi ilkel çözümler olmadığını kanıtlayabilirse erken durur.

Erken durdurmada, çözücü NO_SOLUTION_FOUND sonlandırma nedenini CUTOFF sınırı ile döndürür ve herhangi bir ekstra çözüm bilgisi vermesi gerekmez. Erken durdurma yapılmazsa döndürülen değer üzerinde hiçbir etkisi yoktur.

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

Daha fazla ayrıntı ve bestBoundLimit ile karşılaştırma için kullanıcı kılavuzuna bakın.

objectiveLimit

number

Çözme aracı, en azından bu kadar iyi bir çözüm bulur bulmaz durur. Sonlandırma nedeni FEASIBLE ve HEDEFLEME'yi sınırlandırır.

bestBoundLimit

number

Çözme aracı, en iyi sınırın en azından bu kadar iyi olduğunu kanıtlar almaz durur ve sonlandırma nedeni FEASIBLE veya NO_SOLUTION_FOUND olur ve OBJECTIVE ile sınırlanır.

Daha fazla ayrıntı ve kesimSınırla karşılaştırması için kullanıcı rehberine bakın.

solutionLimit

integer

Çözme aracı, bu kadar çok uygulanabilir çözümü bulduktan sonra erken durur. Sonuçlandırma nedeni GEÇERLİDİR ve ÇÖZÜMÜ sınırlandırır. Ayarlanırsa sıfırdan büyük olmalıdır. Çözücünün bulunan ilk uygulanabilir çözümde durmasını sağlamak için genellikle kullanılır. Döndürülen çözümlerin hedef değeriyle ilgili herhangi bir garanti verilmediğini unutmayın.

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

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

threads

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ülerin LP algoritmasındaki pertürbasyon, bağı ayırma kuralları ve buluşsal düzeltmeler için sözde rastgele sayılar kullandığını unutmayın. Bunun değiştirilmesinin çözme aracı davranışı üzerinde belirgin bir etkisi olabilir.

Tüm çözücüler tohum kavramına sahip olsa da geçerli değerlerin gerçek çözücüye bağlı olduğunu unutmayın. - Gurobi: [0:GRB_MAXINT] (Gurobi 9.0 itibarıyla 2x10^9 değerindedir). - GSCIP: [0:2147483647] (MAX_INT veya kint32max ya da 2^31-1) - GLOP: [0:2147483647] (yukarıdakiyle aynı) Tüm durumlarda çözücü, şuna eşit bir değer alır: MAX(0, MIN(MAX_VALID_VALUE_FOR_SOLVER, duplicateSeed)).

absoluteGapTolerance

number

MIP çözücüler için mutlak optimumluk toleransı (öncelikle).

Mutlak GAP, şunlar arasındaki farkın mutlak değeridir: * bulunan en uygun çözümün hedef değeri, * aramanın üretilen çift sınır. Çözücü, mutlak GAP en fazla Mutlak GapTolerance olduğunda (ayarlandığında) durabilir ve TERMINATION_REASON_OPTIMAL döndürebilir.

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

Ayrıca göreliGapTolerance konusuna bakın.

relativeGapTolerance

number

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

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

Çözücü, göreli GAP en fazla göreliGapTolerance (ayarlandığında) değerine ulaştığında durabilir ve TERMINATION_REASON_OPTIMAL değerini döndürebilir.

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

Ayrıca MutlakGapTolerance konusuna da bakın.

solutionPoolSize

integer

Arama yaparken solutionPoolSize çözüm yönetimine devam edin. Çö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. daha fazla, çözücüye özel yapılandırma gerektirir.

LPAlgorithmProto

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

Sıralamalar
LP_ALGORITHM_UNSPECIFIED
LP_ALGORITHM_PRIMAL_SIMPLEX (Primal) tek yönlü yöntemi. Tipik olarak ilkel ve ikili çözüm, ilkel/çift sınırsız problemlerde primal/çift ışınlar ve bir temel sağlayabilir.
LP_ALGORITHM_DUAL_SIMPLEX Çift tek yönlü yöntemi. Tipik olarak ilkel ve ikili çözüm, ilkel/çift sınırsız problemlerde primal/çift ışınlar ve bir temel sağlayabilir.
LP_ALGORITHM_BARRIER Yaygın olarak iç nokta yöntemi (IPM) olarak da adlandırılan bariyer yöntemi. Genellikle hem ilkel hem de ikili çözümler verebilir. Bazı uygulamalar, sınırsız/uygulanamayan problemler üzerinde de ışınlar üretebilir. Temel çözücü "Çapraz geçiş" yapmadığı sürece temel verilmez tek renkle bitirir.
LP_ALGORITHM_FIRST_ORDER Birinci dereceden yönteme dayalı bir algoritma. Bunlar genellikle hem ilk hem de ikili çözümler üretir ve potansiyel olarak ilkel ve/veya çift uygulanabilirsizlik sertifikaları sağlar. Birinci dereceden yöntemler genellikle daha düşük doğruluk oranıyla çözümler sunar.Bu nedenle, kullanıcıların çözüm kalite parametrelerini (ör. toleranslar) ayarlamaya ve çözümleri doğrulamaya dikkat etmesi gerekir.

EmphasisProto

Çözme sırasında isteğe bağlı bir göreve uygulanan çaba seviyesi (kullanım için bkz. SolveParametersProto).

Vurgu, bir çözücü özelliğini aşağıdaki gibi yapılandırmak için kullanılır: * Çözücü bu özelliği desteklemiyorsa yalnızca UNSPECIFIED (BELİRTİLMEMİŞ) durumu geçerli olur, diğer tüm ayarlar genellikle geçersiz bağımsız değişken hatasına neden olur (bazı çözücüler KAPALI'yı da kabul edebilir). * Çözücü özelliği destekliyorsa: - BELİRTİLMEMİŞ olarak ayarlandığında temel varsayılan kullanılır. - Özellik kapatılamadığında, KAPALI işlevi bir hata döndürür. - Özellik varsayılan olarak etkinleştirilmişse çözücü varsayılanı genellikle ORTA ile eşlenir. - Özellik destekleniyorsa DÜŞÜK, ORTA, YÜKSEK ve ÇOK YÜKSEK seçenekleri hiçbir zaman hata vermez ve en iyi eşleşmeleriyle eşleşir.

Sıralamalar
EMPHASIS_UNSPECIFIED
EMPHASIS_OFF
EMPHASIS_LOW
EMPHASIS_MEDIUM
EMPHASIS_HIGH
EMPHASIS_VERY_HIGH

ModelSolveParametersProto

JSON gösterimi
{
  "variableValuesFilter": {
    object (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) değişkenler tarafından anahtarlanan tüm seyrek kapsayıcılara uygulanan filtre.

Gereksinimler: * filterIds, VariablesProto.ids'in öğeleridir.

dualValuesFilter

object (SparseVectorFilterProto)

DualSolutionProto ve DualRay (DualSolutionProto.dual_values, DualRay.dual_values) doğrusal kısıtlamalarla anahtarlanan tüm seyrek kapsayıcılara uygulanan filtre.

Gereksinimler: * filterId'ler, DoğrusalConstraints.ids öğeleridir.

reducedCostsFilter

object (SparseVectorFilterProto)

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

Gereksinimler: * filterIds, VariablesProto.ids'in öğeleridir.

initialBasis

object (BasisProto)

Hazır durumda başlayan basit LP çözücüler için isteğe bağlı ilk başlangıç temeli. Ayarlanırsa mevcut ModelSummary için validators/solution_validator.h içindeki ValidateBasis ölçütüne göre geçerli olması beklenir.

solutionHints[]

object (SolutionHintProto)

İsteğe bağlı çözüm ipuçları. Temel çözücü yalnızca tek bir ipucu 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 önce dallara ayrılır. Öncelikleri ayarlanmayan değişkenler, çözücünün varsayılan önceliğini alır (genellikle sıfır).

Gereksinimler: * BraingPriorities.values sonlu olmalıdır. * şubelemePriorities.ids, VariablesProto.ids'in öğeleri olmalıdır.

SparseVectorFilterProto

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

JSON gösterimi
{
  "skipZeroValues": boolean,
  "filterByIds": boolean,
  "filteredIds": [
    string
  ]
}
Alanlar
skipZeroValues

boolean

SparseBoolVectorProto için "zero" false.

filterByIds

boolean

Doğru olduğunda, yalnızca filtrelenen kimlikler içinde listelenen kimliklere karşılık gelen değerleri döndürür.

filteredIds[]

string (int64 format)

filterByIds doğru değerine ayarlandığında kullanılacak kimliklerin listesi. filterByIds yanlış değerine ayarlandığında boş bırakılmalıdır. NOT: Bu alan boşsa ve filterByIds doğruysa sonuçta herhangi bir bilgi istemediğiniz anlamına gelir.

BasisProto

Doğrusal bir program çözümünün kombinatorik karakterizasyonu.

Doğrusal programları çözmek için tek yönlü bir yöntem her zaman "temel uygulanabilir çözüm" döndürür açıklanabilir. Bu da temel ile birlikte açıklanabilir. Bir temel, her değişken ve doğrusal sınırlama için bir BasisStatusProto atar.

Ör. standart bir LP biçimi kullanmayı düşünün: min c * x s.t. Kısıtlamalardan daha fazla değişkeni olan ve tam satır sıralaması A olan A * x = b x >= 0.

n, değişken sayısı, m ise doğrusal kısıtlamaların sayısı olsun. Bu sorun için geçerli bir temel aşağıdaki gibi oluşturulabilir: * Tüm kısıtlamaların temel durumu FIXED olacaktır. * A sütunları doğrusal olarak bağımsız olacak şekilde m değişkenleri seçin ve bu değişkenleri BASIC durumunu atayın. * Kalan n - m değişkenlerine AT_LOWER durumunu atayın.

Bu temelin temel çözümü, AT_LOWER durumundaki tüm değişkenlerin alt sınırlarına sabitlendiği (tümü sıfır) A * x = b formülüdür. Sonuçta ortaya çıkan çözüm, x >= 0 değerini de karşılıyorsa temel uygulanabilir çözüm olarak adlandırılır.

JSON gösterimi
{
  "constraintStatus": {
    object (SparseBasisStatusVector)
  },
  "variableStatus": {
    object (SparseBasisStatusVector)
  },
  "basicDualFeasibility": enum (SolutionStatusProto)
}
Alanlar
constraintStatus

object (SparseBasisStatusVector)

Kısıtlama temel durumu.

Gereksinimler: * restrictionStatus.ids, DoğrusalConstraints.ids parametresine eşittir.

variableStatus

object (SparseBasisStatusVector)

Değişken temel durumu.

Gereksinimler: * restrictionStatus.ids, VariablesProto.ids'e eşittir.

basicDualFeasibility

enum (SolutionStatusProto)

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

Tek taraflı LP'ler için bu değer, ilişkili ikili çözümün uygulanabilirlik durumuna eşit olmalıdır. İki taraflı LP'lerde ise bazı sıra dışı durumlarda farklı olabilir (ör. ilk basit pikselle eksik çözmeler).

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

SparseBasisStatusVector

Temel durumlar vektörünün seyrek gösterimi.

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

string (int64 format)

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

values[]

enum (BasisStatusProto)

Kimliklerle eşit uzunlukta olmalıdır.

BasisStatusProto

LP bazında bir değişkenin/kısıtlamanın durumu.

Sıralamalar
BASIS_STATUS_UNSPECIFIED Hiçbir durumu temsil eden Guard değeri.
BASIS_STATUS_FREE Değişken/kısıtlama serbesttir (sonlu sınırları yoktur).
BASIS_STATUS_AT_LOWER_BOUND Değişken/kısıtlama, alt sınırındadır (sonlu olmalıdır).
BASIS_STATUS_AT_UPPER_BOUND Değişken/kısıtlama, üst sınırında (sonlu olmalıdır).
BASIS_STATUS_FIXED_VALUE Değişkenin/kısıtlamanın aynı sonlu alt ve üst sınırları var.
BASIS_STATUS_BASIC Değişken/kısıtlama temel düzeyde.

SolutionStatusProto

Çözücü tarafından iddia edilen ilk veya ikili çözümün uygulanabilirliği.

Sıralamalar
SOLUTION_STATUS_UNSPECIFIED Hiçbir durumu temsil eden Guard değeri.
SOLUTION_STATUS_UNDETERMINED Çözücü bir uygulanabilirlik durumu iddia etmiyor.
SOLUTION_STATUS_FEASIBLE Çözümcü çözümün uygulanabilir olduğunu iddia ediyor.
SOLUTION_STATUS_INFEASIBLE Çözümcü çözümün uygulanabilir olmadığını iddia ediyor.

SolutionHintProto

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

MIP çözücüler genellikle yalnızca temel bilgileri (variableValues), LP çözücüler ise hem temel hem de ikili bilgileri (dualValues) ister.

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

İpucunun çözücü tarafından (varsa) nasıl kullanılacağı büyük ölçüde çözücüye, problem türüne ve kullanılan algoritmaya bağlıdır. İpucunuzun etkili olmasını sağlamanın en güvenilir yolu, temel çözücü günlüklerini ipucu kullanarak ve kullanmadan okumaktır.

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

JSON gösterimi
{
  "variableValues": {
    object (SparseDoubleVectorProto)
  },
  "dualValues": {
    object (SparseDoubleVectorProto)
  }
}
Alanlar
variableValues

object (SparseDoubleVectorProto)

Problemin ilkel değişkenlerine değerlerin muhtemelen kısmi atanması. Bu alt mesaj için çözücüden bağımsız gereksinimler şunlardır: * variableValues.ids, VariablesProto.ids'in öğeleridir. * variableValues.values tüm sonlu olmalıdır.

dualValues

object (SparseDoubleVectorProto)

Problemin doğrusal kısıtlamalarına değer atanması (potansiyel olarak kısmidir).

Gereksinimler: * dualValues.ids, DoğrusalConstraintsProto.ids öğeleridir. * dualValues.values tüm değerleri sonlu olmalıdır.

SparseInt32VectorProto

Tamsayı vektörünün seyrek gösterimi.

JSON gösterimi
{
  "ids": [
    string
  ],
  "values": [
    integer
  ]
}
Alanlar
ids[]

string (int64 format)

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

values[]

integer

Kimliklerle eşit uzunlukta olmalıdır.

SolveResultProto

İlk/ikili çözümlerin/ışınların karmaşık olduğu sözleşmelere ilişkin sözleşmenin tamamı için fesih_reasons.md dosyasına bakın.

Tam bir sözleşme kesinleşene kadar, fesih nedenine güvenmek yerine bir çözüm/ışın mevcut olup olmadığını kontrol etmek en güvenli yöntemdir.

JSON gösterimi
{
  "termination": {
    object (TerminationProto)
  },
  "solutions": [
    {
      object (SolutionProto)
    }
  ],
  "primalRays": [
    {
      object (PrimalRayProto)
    }
  ],
  "dualRays": [
    {
      object (DualRayProto)
    }
  ],
  "solveStats": {
    object (SolveStatsProto)
  }
}
Alanlar
termination

object (TerminationProto)

Çözme aracının durma nedeni.

solutions[]

object (SolutionProto)

Gelecekte çözücülerin uygulaması gereken çözümlerin sırası için genel sözleşme şuna göre sıralama yapmaktır: 1. İlk olarak en iyi ilk hedefe göre sıralanmış ilk uygulanabilir çözüme sahip çözümler. 2. En iyi ikili hedefe (bilinmeyen çift hedef en kötüdür) göre sıralanan, çift uygulanabilir bir çözüme sahip çözümler 3. Kalan tüm çözümler herhangi bir sırada döndürülebilir.

primalRays[]

object (PrimalRayProto)

Sınırsız temel iyileştirme veya eşdeğer şekilde çift uygulanabilirlik sertifikası almama talimatları. Genellikle FesihNedeni Protos UNBOUNDED ve DUAL_INFEASIBLE için sağlanır.

dualRays[]

object (DualRayProto)

Sınırsız ikili iyileştirme veya eşdeğeri ilkesel uygulanabilirlik sertifikalarıyla ilgili talimatlar. Genellikle ExpirationStatusProto INFEASIBLE için sağlanır.

solveStats

object (SolveStatsProto)

Çözüm sürecine ilişkin istatistikler, ör. iterasyonlar ile yürütüldüğü anlamına gelir.

TerminationProto

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

JSON gösterimi
{
  "reason": enum (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çinde ek bilgiler. Ayrıntılar için limit sayfasına bakın.

limit

enum (LimitProto)

Gerekçe TERMINATION_REASON_FEASIBLE veya TERMINATION_REASON_NO_SOLUTION_FOUND değilse LIMIT_UNSPECIFIED. Tüm çözücüler her zaman sonlandırmaya neden olan sınırı belirleyemez. LIMIT_UNDETERMINED, neden belirlenemediğinde kullanılır.

detail

string

Sonlandırma hakkında genellikle çözücüye özel ek bilgiler.

problemStatus

object (ProblemStatusProto)

Temel ve ikili problemler için uygulanabilirlik durumları. 18 Temmuz 2023 itibarıyla bu mesaj kaybolabilir. Sorun durumu, eksikse SolveResultProto.solve_stats dosyasında bulunabilir.

objectiveBounds

object (ObjectiveBoundsProto)

Optimum hedef değerine ilişkin sınırlar. 18 Temmuz 2023 itibarıyla bu mesaj kaybolabilir. Hedef

TerminationReasonProto

Solve() çağrısının sona erme nedeni.

Sıralamalar
TERMINATION_REASON_UNSPECIFIED
TERMINATION_REASON_OPTIMAL Kanıtlanabilir olarak ideal bir çözüm (sayısal toleranslara kadar) bulundu.
TERMINATION_REASON_INFEASIBLE Temel problemin makul bir çözümü yok.
TERMINATION_REASON_UNBOUNDED Temel problem uygulanabilir ve primal ışın üzerinde rastgele iyi çözümlere rastlanabilir.
TERMINATION_REASON_INFEASIBLE_OR_UNBOUNDED Temel problem ya uygulanabilir ya da sınırsızdır. Sorunun durumuyla ilgili daha fazla ayrıntıya allowStats.problem_status sayfasından ulaşabilirsiniz. Gurobi'nin sınırsız durumunun burada eşlenebileceğini unutmayın.
TERMINATION_REASON_IMPRECISE

Problem, yukarıdaki kriterlerden birine göre çözüldü (Optimal, Infeasible, Unbounded veya InfeasibleOrUnbounded), ancak bir veya daha fazla tolerans karşılanmadı. Bazı ilkel/çift çözümler/ışınlar mevcuttur, ancak bunlar biraz uygulanabilir değildir veya (sorun neredeyse optimumsa) en iyi çözüm hedefi ile en iyi hedef sınırı arasında bir boşluk olabilir.

Kullanıcılar temel/çift çözümleri/ışınları ve çözüm istatistiklerini sorgulamaya devam edebilir, ancak sayısal doğrulukla ilgilenmekten sorumludur.

TERMINATION_REASON_FEASIBLE Optimize Edici bir tür sınıra ulaştı ve ilk uygulanabilir çözüm döndürüldü. Ulaşılan sınır türünün ayrıntılı açıklaması için SolveResultProto.limit_detail bölümüne bakın.
TERMINATION_REASON_NO_SOLUTION_FOUND Optimize Edici bir tür sınıra ulaştı ve makul bir çözüm bulamadı. Ulaşılan sınır türünün ayrıntılı açıklaması için SolveResultProto.limit_detail bölümüne bakın.
TERMINATION_REASON_NUMERICAL_ERROR Algoritma, düzeltilemeyen sayısal hatayla karşılaştığı için durdu. Çözüm bilgisi yok.
TERMINATION_REASON_OTHER_ERROR Algoritma, yukarıda tanımlanan durumlardan birinin kapsamına girmeyen bir hata nedeniyle durduruldu. Çözüm bilgisi yok.

LimitProto

Bir Solve(), ExpirationConditionProto FEASIBLE veya NO_SOLUTION_FOUND ile erken durduğunda, isabetli sınıra ulaşmış olursunuz.

Sıralamalar
LIMIT_UNSPECIFIED Bir sınıra dayanarak sonlandırmadığımızda null değer olarak kullanılır (ör. TERMINATION_REASON_OPTIMAL).
LIMIT_UNDETERMINED Temel çözücü hangi sınıra ulaşıldığını göstermez.
LIMIT_ITERATION Yinelemeli bir algoritma, maksimum sayıda yineleme (ör. tek yönlü veya bariyer yinelemeleri) gerçekleştirdikten sonra durdu.
LIMIT_TIME Algoritma, kullanıcı tarafından belirtilen hesaplama süresinden sonra durdu.
LIMIT_NODE Dala ve dallara bağlı bir algoritma, dal ve bağlı ağaçta maksimum sayıda düğüm keşfettiği için durdu.
LIMIT_SOLUTION Gerekli sayıda çözüm bulduğu için algoritma durdu. Bu yöntem, çoğu zaman MIP'lerde çözücünün karşılaştığı ilk uygulanabilir çözümü döndürmesini sağlamak için kullanılır.
LIMIT_MEMORY Bellek tükendiği için algoritma durduruldu.
LIMIT_CUTOFF Çözme aracı, hedef üzerinde bir kesimle (ör. SolveParameters.cutoff_limit ayarlanmış) çalıştırıldı. Bu, kullanıcının sondan daha kötü bir çözüm istemediğini gösterir. Çözücü, en az kesme değeri kadar iyi bir çözümün olmadığı sonucuna varmıştır. Genellikle çözüm için daha fazla bilgi sağlanmaz.
LIMIT_OBJECTIVE Algoritma, kullanıcı tarafından ayarlanan sınırdan daha iyi bir çözüm veya sınır bulduğu için durdu (bkz. SolveParameters.objective_limit ve SolveParameters.best_bound_limit).
LIMIT_NORM Yineleme normu çok büyük hale geldiği için algoritma durdu.
LIMIT_INTERRUPTED Algoritma, bir kesme sinyali veya kullanıcı kesme isteği nedeniyle durdu.
LIMIT_SLOW_PROGRESS Çözüme yönelik ilerleme kaydedilemediği için algoritma durduruldu.
LIMIT_OTHER

Algoritma, yukarıdakilerden birinin kapsamadığı bir sınır nedeniyle durduruldu. Neden belirlenemediğinde LIMIT_UNDETERMINED öğesinin, neden bilindiği halde yukarıdaki alternatiflerin hiçbirine uymadığında LIMIT_OTHER öğesinin kullanıldığını unutmayın.

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

ProblemStatusProto

Çözücü tarafından iddia edilen temel problemin ve ikilisinin (ya da sürekli gevşemenin ikilisi) uygulanabilirlik durumu. Çözücünün iddia için bir sertifika döndürmesi gerekmez (örneğin, çözücü, ilk uygulanabilir bir çözüm döndürmeden ilkel uygulanabilirlik iddiasında bulunabilir). Bu birleşik durum, çözücünün çözülen sorunun uygulanabilirliği ve sınırsızlığı hakkındaki iddialarına yönelik kapsamlı bir açıklama sağlar. Örneğin,

  • ilk ve ikili problemler için uygulanabilir durumu, ilkel problemin uygulanabilir ve sınırlı olduğunu ve muhtemelen optimum bir çözüme sahip olduğunu gösterir (doğrusal olmayan kısıtlamalar olmadığı sorunlar için garanti edilir).
  • İlk uygulanabilir ve çift uygulanabilir değil durumu, ilk problemin sınırsız olduğunu (yani rastgele iyi çözümlere sahip olduğunu) gösterir.

İkili uygulanabilir değil durumunun tek başına (belirsiz bir ilkel statüyle birlikte) temel problemin sınırsız olduğu anlamına gelmediğini unutmayın çünkü her iki problem de uygulanabilir olabilir. Ayrıca ilk ve çift uygulanabilir durumu, optimum çözümün var olduğunu ima edebilir ancak çözücünün gerçekten optimum çözümü bulduğunu garanti etmez.

JSON gösterimi
{
  "primalStatus": enum (FeasibilityStatusProto),
  "dualStatus": enum (FeasibilityStatusProto),
  "primalOrDualInfeasible": boolean
}
Alanlar
primalStatus

enum (FeasibilityStatusProto)

Temel problemin durumu.

dualStatus

enum (FeasibilityStatusProto)

İkili problemin (veya sürekli gevşetme ikilisinin) durumu.

primalOrDualInfeasible

boolean

Doğru ise çözücü ilkel veya ikili problemin uygulanabilir olmadığını iddia eder ama hangisinin (ya da ikisinin de uygulanabilir olmadığını) bilemez. Yalnızca primal_problem_status = dual_problem_status = kUndetermined olduğunda doğru olabilir. Bu ek bilgi, genellikle ön işlemenin sorun için optimum bir çözüm olmadığını belirlediğinde (ancak sorunun uygulanabilirliğinden, sınırsızlıktan veya her ikisinden mi kaynaklandığını belirleyemediğinde) gerekir.

FeasibilityStatusProto

Çözücü tarafından iddia edilen sorun uygulanabilirliği durumu (çözümün, talep için bir sertifika döndürmesi gerekmez).

Sıralamalar
FEASIBILITY_STATUS_UNSPECIFIED Hiçbir durumu temsil eden Guard değeri.
FEASIBILITY_STATUS_UNDETERMINED Çözücü bir statü talebinde bulunmaz.
FEASIBILITY_STATUS_FEASIBLE Çözücü sorunun uygulanabilir olduğunu iddia ediyor.
FEASIBILITY_STATUS_INFEASIBLE Çözücü, sorunun uygulanabilir olmadığını iddia ediyor.

ObjectiveBoundsProto

Optimum hedef değerine ilişkin sınırlar.

JSON gösterimi
{
  "primalBound": number,
  "dualBound": number
}
Alanlar
primalBound

number

Çözücü, optimum değerin, çözücülerin temel uygulanabilirlik toleransına kadar olan ilkel bağdan eşit veya daha iyi (küçültme için daha küçük, maksimizasyon için daha büyük) olduğunu iddia etmektedir. * primalBound, optimum değere, en iyi ilk uygulanabilir çözümün hedefine göre daha yakın olabilir. Özellikle, ilk uygulanabilir çözümler döndürülmese bile primalBound değeri önemsiz olabilir. Uyarı: *'nin sayısal olarak uygulanabilir (yani çözücü toleransına kadar uygulanabilir) ve * değerinin asalBound nesnel değerine sahip bir ilkel çözüm olduğu iddia edilir. Bu sayısal olarak uygulanabilir çözüm biraz uygulanabilir olmayabilir. Bu durumda, primalBound optimum değerden kesinlikle daha iyi olabilir. Özellikle uygulanabilirlik toleransı nispeten büyük olduğunda (ör. PDLP ile çözümleme sırasında) ilkel fizibilite toleransını ilkelBound'daki bir toleransa dönüştürmek önemsizdir.

dualBound

number

Çözücü, ideal değerin çift fizibilite toleransına kadar dualBound (küçültme için daha büyük, maksimizasyon için daha küçük) olduğunu iddia eder. PrialBound'a benzer bir şekilde, optimum değer döndürüldüğünde bile bazı çözücüler için bu durum görülebilir. MIP çözücüler tam olmasa bile genellikle bir sınır bildirir. * dualBound, sürekli sorunlar için en uygun ikili çözümün amacından optimum değere daha yakın olabilir. MIP için dualBound'un önemsiz olmayan ilk değerlerinden biri, genellikle MIP'nin LP gevşetmesinin optimum değeridir. * dualBound, çözücü toleranslarına kadar primalBound'dan daha iyi (küçültme için daha küçük, maksimizasyon için daha büyük) olmalıdır. (Aşağıdaki uyarıya bakın.) Uyarı: * Sürekli problemlerde asıl iddia, * sayısal olarak uygulanabilir (yani çözücü toleransına kadar uygulanabilir) ve * dualBound nesnel değerine sahip bir ikili çözümün bulunduğudur. Bu sayısal olarak uygulanabilir çözüm biraz uygulanabilir olmayabilir. Bu durumda dualBound, optimum değerden ve ilkelBound'dan kesinlikle daha kötü olabilir. İlk duruma benzer şekilde, özellikle uygulanabilirlik toleransı nispeten büyük olduğunda çift fizibilite toleransını dualBound'da bir toleransa dönüştürmek önemsiz bir yaklaşımdır. Bununla birlikte, bazı çözücüler dualBound'un sayısal olarak daha güvenli olabilecek düzeltilmiş bir sürümünü sağlar. Bu düzeltilmiş sürüme, çözücünün özel çıkışıyla erişilebilir (ör. PDLP, pdlp_çıkış.confergence_information.adjusted_dual_objective). * MIP çözücüler için dualBound, bir miktar sürekli gevşetme (ör.LP gevşemesi) için ikili bir çözümle ilişkilendirilebilir. Ancak bu durum genellikle çözücülerin yürütülmesinin karmaşık bir sonucudur ve LP çözücüler tarafından bildirilen sınırlardan daha kesin değildir.

SolutionProto

Çözüme nelerin dahil edileceği, problemin ve çözücünün türüne göre değişir. Şu anda yaygın olan kalıplar 1'dir. MIP çözücüler yalnızca primal çözüm döndürür. 2. Basit LP çözücüler genellikle bir temel ve bu temelle ilişkili ilk ve ikili çözümleri döndürür. 3. Diğer sürekli çözücüler genellikle çözücüye bağlı bir biçimde bağlı ilkel ve ikili çözüm çözümlerini döndürür.

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

JSON gösterimi
{
  "primalSolution": {
    object (PrimalSolutionProto)
  },
  "dualSolution": {
    object (DualSolutionProto)
  },
  "basis": {
    object (BasisProto)
  }
}
Alanlar
primalSolution

object (PrimalSolutionProto)

dualSolution

object (DualSolutionProto)

basis

object (BasisProto)

PrimalSolutionProto

Optimizasyon problemi için bir çözüm.

Ör. basit bir doğrusal program düşünün: min c * x s.t. H * x >= b x >= 0. Asal çözüm, x'e değer atamadır. Yukarıdaki A * x >= b ve x >= 0 değerlerini karşılıyorsa uygulanabilir. Aşağıdaki PrimalSolutionProto mesajında,variableValues x, hedefValue ise c * x'tir.

JSON gösterimi
{
  "variableValues": {
    object (SparseDoubleVectorProto)
  },
  "objectiveValue": number,
  "auxiliaryObjectiveValues": {
    string: number,
    ...
  },
  "feasibilityStatus": enum (SolutionStatusProto)
}
Alanlar
variableValues

object (SparseDoubleVectorProto)

Gereksinimler: * variableValues.ids, VariablesProto.ids'in öğeleridir. * variableValues.values 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 hesaplandığı şekilde yardımcı hedef değerleri. Anahtarlar, geçerli bir yardımcı hedef kimlikleri olmalıdır. Değerler sonsuz veya NaN olamaz.

"key": value çiftlerinin 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 probleminin ikisine birden çözüm.

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

Aşağıdaki mesajda y dualValues, r azaltılmışMaliyetler ve b * y nesnel değerdir.

JSON gösterimi
{
  "dualValues": {
    object (SparseDoubleVectorProto)
  },
  "reducedCosts": {
    object (SparseDoubleVectorProto)
  },
  "feasibilityStatus": enum (SolutionStatusProto),
  "objectiveValue": number
}
Alanlar
dualValues

object (SparseDoubleVectorProto)

Gereksinimler: * dualValues.ids, DoğrusalConstraints.ids öğeleridir. * dualValues.values tüm değerleri sonlu olmalıdır.

reducedCosts

object (SparseDoubleVectorProto)

Gereksinimler: * Reduces.ids, VariablesProto.ids'nin öğeleridir. * İndirimliMaliyetler.değerlerinin tümü sonlu olmalıdır.

feasibilityStatus

enum (SolutionStatusProto)

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

objectiveValue

number

PrimalRayProto

Optimizasyon problemi için sınırsız iyileştirme yönü buna eşdeğer olarak, optimizasyon probleminin ikilisi için uygulanabilirlik sertifikası almalısınız.

Ör. basit bir doğrusal program düşünün: min c * x s.t. A * x >= b x >= 0 İlkel ışın şu koşulu karşılayan bir x'tir: c * x < 0 A * x >= 0 x >= 0 Makul bir çözüm verildiğinde ilkel ışın ile bu çözümün pozitif katları arasında hâlâ uygulanabilir olduğunu ve daha iyi bir objektif değer verdiğini gözlemleyin. İlkel ışın da ikili optimizasyon sorununun uygulanabilir olmadığını kanıtlar.

Aşağıdaki PrimalRay mesajında, variableValues değeri x'tir.

JSON gösterimi
{
  "variableValues": {
    object (SparseDoubleVectorProto)
  }
}
Alanlar
variableValues

object (SparseDoubleVectorProto)

Gereksinimler: * variableValues.ids, VariablesProto.ids'in öğeleridir. * variableValues.values tüm sonlu olmalıdır.

DualRayProto

Optimizasyonun ikisine sınırsız iyileştirmenin yönü, sorun; buna karşılık ilkel uygulanabilirlik sertifikası bulunmalıdır.

Ör. şu asal çift çiftli doğrusal program çiftini dikkate alın: (Primal) (Çift) min c * x maks. b * y s.t. A * x >= b s.t. y * A + r = c x >= 0 y, r >= 0. Çift ışın, b * y > hareketini tatmin eden (y, r) çiftidir 0 y * A + r = 0 y, r >= 0 İkili uygulanabilir çözüme (y, r) pozitif bir katı eklemenin çift uygulanabilirliği koruduğunu ve hedefi iyileştirdiğini (ikinin sınırsız olduğunu kanıtladığını) gözlemleyin. Çift ışın da ilkel problemin uygulanabilir olmadığını kanıtlıyor.

Aşağıdaki DualRay mesajında y dualValues, r ise azaltılmış maliyettir.

JSON gösterimi
{
  "dualValues": {
    object (SparseDoubleVectorProto)
  },
  "reducedCosts": {
    object (SparseDoubleVectorProto)
  }
}
Alanlar
dualValues

object (SparseDoubleVectorProto)

Gereksinimler: * dualValues.ids, DoğrusalConstraints.ids öğeleridir. * dualValues.values tüm değerleri sonlu olmalıdır.

reducedCosts

object (SparseDoubleVectorProto)

Gereksinimler: * Reduces.ids, VariablesProto.ids'nin öğeleridir. * İndirimliMaliyetler.değerlerinin 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_optimizasyon ile ölçülen geçen gerçek süre (yaklaşık olarak Solver::Solve() içindeki süre). Not: Model oluşturmak için yapılan işler buna dahil değildir.

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

problemStatus

object (ProblemStatusProto)

Temel ve ikili problemler için uygulanabilirlik durumları.

simplexIterations

string (int64 format)

barrierIterations

string (int64 format)

firstOrderIterations

string (int64 format)

nodeCount

string (int64 format)