Indice
BasisProto
(messaggio)BasisStatusProto
(enum)DualRayProto
(messaggio)DualSolutionProto
(messaggio)EmphasisProto
(enum)FeasibilityStatusProto
(enum)IndicatorConstraintProto
(messaggio)LPAlgorithmProto
(enum)LimitProto
(enum)LinearConstraintsProto
(messaggio)LinearExpressionProto
(messaggio)ModelProto
(messaggio)ModelSolveParametersProto
(messaggio)ObjectiveBoundsProto
(messaggio)ObjectiveProto
(messaggio)PrimalRayProto
(messaggio)PrimalSolutionProto
(messaggio)ProblemStatusProto
(messaggio)QuadraticConstraintProto
(messaggio)SecondOrderConeConstraintProto
(messaggio)SolutionHintProto
(messaggio)SolutionProto
(messaggio)SolutionStatusProto
(enum)SolveParametersProto
(messaggio)SolveResultProto
(messaggio)SolveStatsProto
(messaggio)SolverTypeProto
(enum)SosConstraintProto
(messaggio)SparseBasisStatusVector
(messaggio)SparseDoubleMatrixProto
(messaggio)SparseDoubleVectorProto
(messaggio)SparseInt32VectorProto
(messaggio)SparseVectorFilterProto
(messaggio)TerminationProto
(messaggio)TerminationReasonProto
(enum)VariablesProto
(messaggio)
BasisProto
Caratterizzazione combinatoria di una soluzione di un programma lineare.
Il metodo Simplex per risolvere programmi lineari restituisce sempre una "soluzione di base fattibile" che può essere descritta combinatorialmente da una Base. Una base assegna un valore BaseStatusProto a ogni variabile e vincolo lineare.
Ad esempio, considera un LP in forma standard: min c * x s.t. A * x = b x >= 0 che ha più variabili dei vincoli e con ranking A per riga intera.
Sia n il numero di variabili e m il numero di vincoli lineari. Una base valida per questo problema può essere creata come segue: * Tutti i vincoli avranno stato Base FISSO. * Scegli m variabili in modo che le colonne A siano linearmente indipendenti e assegni lo stato BASE. * Assegna lo stato AT_LOWER per le restanti variabili n - m.
La soluzione di base è l'unica soluzione di A * x = b con tutte le variabili con stato AT_LOWER fissi sui limiti inferiori (tutte zero). La soluzione risultante è chiamata soluzione fattibile di base se soddisfa anche x >= 0.
Campi | |
---|---|
constraint_status |
Stato della base di vincolo. Requisiti: * constraints_status.ids è uguale a LinearConstraints.ids. |
variable_status |
Stato di base variabile. Requisiti: * constraints_status.ids è uguale a variablesProto.ids. |
basic_dual_feasibility |
Si tratta di una funzionalità avanzata utilizzata da Mathopt per caratterizzare la fattibilità di soluzioni LP non ottimali (le soluzioni ottimali avranno sempre lo stato SOLUTION_STATUS_FEASIBLE). Per gli LP su un solo lato deve corrispondere allo stato di fattibilità della soluzione doppia associata. Per gli LP a due lati, il processo potrebbe essere diverso in alcuni casi limite (ad es. in caso di soluzioni incomplete con un Simplex primordiale). Se fornisci una base iniziale tramite ModelSolveParametersProto.initial_basis, questo valore viene ignorato. È pertinente solo per la base restituita da SolutionProto.basis. |
BasisStatusProto
Stato di una variabile o di un vincolo in base alla pagina di destinazione.
Enum | |
---|---|
BASIS_STATUS_UNSPECIFIED |
Valore di Guard che non rappresenta alcuno stato. |
BASIS_STATUS_FREE |
La variabile/il vincolo è libero (non ha limiti finiti). |
BASIS_STATUS_AT_LOWER_BOUND |
La variabile/il vincolo si trova al limite inferiore (che deve essere finito). |
BASIS_STATUS_AT_UPPER_BOUND |
La variabile/il vincolo si trova al limite superiore (che deve essere finito). |
BASIS_STATUS_FIXED_VALUE |
La variabile/il vincolo ha limiti inferiori e superiori finiti identici. |
BASIS_STATUS_BASIC |
La variabile/il vincolo è di base. |
DualRayProto
Direzione di miglioramento illimitato al duplice di un problema di ottimizzazione; equivalente a un certificato di infattibilità primordiale.
Ad esempio, considera la coppia di programmi lineari a due coppie principali: (Primale) (Doppia) min c * x max b * y s.t. A * x >= b s.t. y * A + r = c x >= 0 y, r >= 0. Il raggio doppio è la coppia (y, r) soddisfatta: Il doppio raggio dimostra inoltre che il problema primordiale è impossibile.
Nel messaggio DualRay riportato di seguito, y è doppio_valori e r è ridotto_costi.
Campi | |
---|---|
dual_values |
Requisiti: * dual_values.id sono elementi di LinearConstraints.ids. * dual_values.values devono essere tutti limitati. |
reduced_costs |
Requisiti: * reduce_costs.id sono elementi di variablesProto.ids. * I valori_costi_ridotti devono essere tutti limitati. |
DualSolutionProto
Una soluzione al duplice di un problema di ottimizzazione.
Ad esempio, considera la coppia di programmi lineari a due coppie principali: (Primale) (Doppia) min c * x max b * y s.t. A * x >= b s.t. y * A + r = c x >= 0 y, r >= 0. La duplice soluzione è la coppia (y, r). È fattibile se soddisfa i vincoli descritti sopra (Dual).
Nel messaggio seguente, y è doppio_valore, r è ridotto_costi e b * y è il valore obiettivo.
Campi | |
---|---|
dual_values |
Requisiti: * dual_values.id sono elementi di LinearConstraints.ids. * dual_values.values devono essere tutti limitati. |
reduced_costs |
Requisiti: * reduce_costs.id sono elementi di variablesProto.ids. * I valori_costi_ridotti devono essere tutti limitati. |
feasibility_status |
Stato di fattibilità della soluzione in base al risolutore sottostante. |
objective_value |
|
EmphasisProto
Livello di sforzo applicato a un'attività facoltativa durante la risoluzione (per l'utilizzo, consulta SolveParametersProto).
L'enfasi viene utilizzata per configurare una funzionalità del risolutore come segue: * Se un risolutore non supporta la funzionalità, sarà sempre valida solo UNSPECIFIED, mentre qualsiasi altra impostazione genera in genere un errore relativo a un argomento non valido (alcuni risolutori possono accettare anche OFF). * Se il risolutore supporta la funzionalità: - Se l'opzione è impostata su UNSPECIFIED, viene utilizzato il valore predefinito sottostante. - Se non è possibile disattivare la funzione, l'opzione OFF restituirà un errore. - Se la funzionalità è abilitata per impostazione predefinita, il valore predefinito del risolutore è in genere mappato su MEDIUM. - Se la funzione è supportata, i valori BASSO, MEDIO, ALTO e MOLTO ALTO non restituiranno mai un errore e verranno associati alla loro corrispondenza migliore.
Enum | |
---|---|
EMPHASIS_UNSPECIFIED |
|
EMPHASIS_OFF |
|
EMPHASIS_LOW |
|
EMPHASIS_MEDIUM |
|
EMPHASIS_HIGH |
|
EMPHASIS_VERY_HIGH |
FeasibilityStatusProto
Stato di fattibilità del problema come dichiarato dal risolutore (il risolutore non è tenuto a restituire un certificato per il reclamo).
Enum | |
---|---|
FEASIBILITY_STATUS_UNSPECIFIED |
Valore di Guard che non rappresenta alcuno stato. |
FEASIBILITY_STATUS_UNDETERMINED |
Il risolutore non rivendica uno stato. |
FEASIBILITY_STATUS_FEASIBLE |
Il risolutore afferma che il problema è fattibile. |
FEASIBILITY_STATUS_INFEASIBLE |
Il risolutore afferma che il problema non è fattibile. |
IndicatorConstraintProto
Dati per la rappresentazione di un singolo vincolo di indicatore nel formato: variabile(indicator_id) = (activate_on_zero ? 0 : 1) → limite_inferiore <= espressione <= limite_superiore.
Se una variabile coinvolta in questo vincolo (l'indicatore o visualizzato in expression
) viene eliminata, viene trattata come se fosse impostata su zero. In particolare, l'eliminazione della variabile indicatore significa che il vincolo dell'indicatore è vuoto se activate_on_zero
è falso e che equivale a un vincolo lineare se activate_on_zero
è vero.
Campi | |
---|---|
activate_on_zero |
Se il valore è true, se la variabile indicatore assume il valore 0, è necessario mantenere il vincolo implicito. Altrimenti, se la variabile dell'indicatore assume il valore 1, il vincolo implicito deve restare valido. |
expression |
Deve essere un'espressione lineare valida rispetto al modello contenitore: * Tutte le condizioni indicate in |
lower_bound |
Deve avere un valore in [-inf, inf); non può essere NaN. |
upper_bound |
Deve avere un valore in (-inf, inf]; non può essere NaN. |
name |
I messaggi principali potrebbero avere requisiti di univocità in questo campo; ad esempio, vedi |
indicator_id |
Un ID corrispondente a una variabile binaria o non impostato. Se non viene configurato, il vincolo dell'indicatore viene ignorato. Se impostato, è necessario che: * variablesProto.integers[indicator_id] = true, * variablesProto.lower_bounds[indicator_id] >= 0, * variablesProto.upper_bounds[indicator_id] <= 1. Queste condizioni non vengono convalidate da Mathopt, ma se non vengono soddisfatte, il risolutore restituisce un errore al momento della risoluzione. |
LPAlgorithmProto
Seleziona un algoritmo per risolvere programmi lineari.
Enum | |
---|---|
LP_ALGORITHM_UNSPECIFIED |
|
LP_ALGORITHM_PRIMAL_SIMPLEX |
Il metodo simplex (principale). Tipicamente può fornire soluzioni primali e doppi, raggi primoli/doppi su problemi primitivi/doppi illimitati e una base. |
LP_ALGORITHM_DUAL_SIMPLEX |
Il metodo dual simplex. Tipicamente può fornire soluzioni primali e doppi, raggi primoli/doppi su problemi primitivi/doppi illimitati e una base. |
LP_ALGORITHM_BARRIER |
Il metodo della barriera, comunemente chiamato anche metodo interno del punto (IPM). In genere può fornire soluzioni sia primali che doppie. Alcune implementazioni possono produrre raggi anche su problemi illimitati/impossibili. Non viene fornita una base a meno che il risolutore sottostante non faccia un "crossover" e finisca con un Simplex. |
LP_ALGORITHM_FIRST_ORDER |
Un algoritmo basato su un metodo del primo ordine. che producono in genere sia soluzioni primali che doppie e potenzialmente anche certificati di irrilevanza primale e/o doppia. I metodi del primo ordine in genere forniscono soluzioni con minore accuratezza, quindi gli utenti dovrebbero fare attenzione a impostare i parametri di qualità della soluzione (ad es. le tolleranze) e a convalidare le soluzioni. |
LimitProto
Quando un metodo Solve() si arresta in anticipo con TerminaReasonProto FEASIBLE o NO_SOLUTION_FOUND, il limite specifico che è stato raggiunto.
Enum | |
---|---|
LIMIT_UNSPECIFIED |
Utilizzato come valore null quando abbiamo terminato da un limite diverso da un limite (ad es. TERMINATION_REASON_OPTIMAL). |
LIMIT_UNDETERMINED |
Il risolutore sottostante non indica quale limite è stato raggiunto. |
LIMIT_ITERATION |
Un algoritmo iterativo si è interrotto dopo aver eseguito il numero massimo di iterazioni (ad es. iterazioni simplex o di barriera). |
LIMIT_TIME |
L'algoritmo si è arrestato dopo un tempo di calcolo specificato dall'utente. |
LIMIT_NODE |
Un algoritmo ramo e associato è stato interrotto perché ha esplorato un numero massimo di nodi nell'albero ramo e associato. |
LIMIT_SOLUTION |
L'algoritmo si è interrotto perché ha trovato il numero di soluzioni richiesto. Questo viene spesso utilizzato nelle MIP per fare in modo che il risolutore restituisca la prima soluzione possibile che incontra. |
LIMIT_MEMORY |
L'algoritmo si è interrotto perché ha esaurito la memoria. |
LIMIT_CUTOFF |
Il risolutore è stato eseguito con un limite (ad es. era stato impostato SolveParameters.cutoff_limit) per l'obiettivo, il che indicava che l'utente non voleva alcuna soluzione peggiore della soglia limite e il risolutore ha concluso che non c'erano soluzioni almeno pari al limite. In genere non vengono fornite ulteriori informazioni sulla soluzione. |
LIMIT_OBJECTIVE |
L'algoritmo si è arrestato perché ha trovato una soluzione o un limite migliore di un limite impostato dall'utente (vedi SolveParameters.objective_limit e SolveParameters.best_bound_limit). |
LIMIT_NORM |
L'algoritmo si è interrotto perché la norma di un'iterazione è diventata troppo grande. |
LIMIT_INTERRUPTED |
L'algoritmo è stato interrotto a causa di un indicatore di interruzione o di una richiesta di interruzione dell'utente. |
LIMIT_SLOW_PROGRESS |
L'algoritmo si è interrotto perché non è stato possibile continuare a fare progressi verso la soluzione. |
LIMIT_OTHER |
L'algoritmo è stato interrotto a causa di un limite non coperto da uno dei suddetti limiti. Tieni presente che LIMIT_UNDETERMINED viene utilizzato quando non è possibile determinare il motivo, mentre LIMIT_OTHER viene utilizzato quando il motivo è noto, ma non rientra in nessuna delle alternative precedenti. TerminazioneProto.detail potrebbe contenere informazioni aggiuntive sul limite. |
LinearConstraintsProto
Come utilizzato di seguito, definiamo "#encoder lineare" = size(LinearConstraintsProto.ids).
Campi | |
---|---|
ids[] |
Deve essere un numero non negativo ed essere necessariamente in aumento. Impossibile utilizzare il valore max(int64). |
lower_bounds[] |
Deve avere una lunghezza uguale ai vincoli #lineari, valori in [-inf, inf). |
upper_bounds[] |
Deve avere una lunghezza uguale ai vincoli #lineari, valori in (-inf, inf]. |
names[] |
Se non impostato, si presume che siano tutte stringhe vuote. In caso contrario, la lunghezza deve essere uguale a quella dei vincoli #linear. Tutti i nomi non vuoti devono essere distinti. |
LinearExpressionProto
Una rappresentazione sparsa di un'espressione lineare (una somma ponderata di variabili più un offset costante).
Campi | |
---|---|
ids[] |
ID di variabili. Devono essere ordinati (in ordine crescente) con tutti gli elementi distinti. |
coefficients[] |
La lunghezza deve essere uguale agli ID. I valori devono essere limitati non possono essere NaN. |
offset |
Deve essere limitato e non può essere NaN. |
ModelProto
Un problema di ottimizzazione. MathOpt supporta: - Variabili di decisione continue e numeri interi con limiti finiti facoltativi. - Obiettivi lineari e quadratici (singoli o multipli), minimizzati o ingranditi. - Una serie di tipi di vincoli, inclusi: * Vincoli lineari * Vincoli quadratici * Vincoli del cono del secondo ordine * Vincoli logici > Vincoli SOS1 e SOS2 > Vincoli indicatore
Per impostazione predefinita, i vincoli sono rappresentati nelle mappe "id-to-data". Tuttavia, rappresentiamo i vincoli lineari in un formato "struct-of-arrays" più efficiente.
Campi | |
---|---|
name |
|
variables |
|
objective |
L'obiettivo principale nel modello. |
auxiliary_objectives |
Obiettivi ausiliari da utilizzare nei modelli con più obiettivi. Gli ID delle chiavi della mappa devono essere specificati nel formato [0, max(int64)). Ogni priorità e ogni nome non vuoto devono essere univoci e distinti dal |
linear_constraints |
|
linear_constraint_matrix |
I coefficienti variabili per i vincoli lineari. Se una variabile coinvolta in questo vincolo viene eliminata, viene trattata come se fosse impostata su zero. Requisiti: * linear_constraint_matrix.row_ids sono elementi di linear_constraints.ids. * linear_constraint_matrix.column_ids sono elementi di variables.id. * Le voci della matrice non specificate sono zero. * I valori matrici_constraint_lineare devono essere tutti finiti. |
quadratic_constraints |
Vincoli quadratici nel modello. |
second_order_cone_constraints |
Vincoli coni del secondo ordine nel modello. |
sos1_constraints |
I vincoli SOS1 nel modello prevedono che al massimo un |
sos2_constraints |
I vincoli SOS2 nel modello prevedono che al massimo due voci di |
indicator_constraints |
Vincoli di indicatori nel modello che lo applicano, se una "variabile indicatore" binaria è impostata su uno, deve essere applicato un "vincolo implicito". |
ModelSolveParametersProto
Campi | |
---|---|
variable_values_filter |
Filtro applicato a tutti i container sparsi restituiti basati su variabili in PrimalSolutionProto e PrimalRayProto (PrimalSolutionProto.variable_values, PrimalRayProto.variable_values). Requisiti: * filtrati_id sono elementi di variablesProto.ids. |
dual_values_filter |
Filtro applicato a tutti i container sparsi restituiti associati a vincoli lineari in DualSolutionProto e DualRay (DualSolutionProto.dual_values, DualRay.dual_values). Requisiti: * filtrati_id sono elementi di LinearConstraints.ids. |
reduced_costs_filter |
Filtro applicato a tutti i container sparse restituiti associati a variabili in DualSolutionProto e DualRay (DualSolutionProto.reduced_costs, DualRay.reduced_costs). Requisiti: * filtrati_id sono elementi di variablesProto.ids. |
initial_basis |
Base iniziale facoltativa per i risolutori LP Simplex con avvio tiepido. Se impostato, dovrebbe essere valido in base al criterio |
solution_hints[] |
Suggerimenti facoltativi sulla soluzione. Se il risolutore sottostante accetta solo un singolo suggerimento, viene utilizzato il primo. |
branching_priorities |
Priorità di diramazione facoltative. Le variabili con valori più elevati verranno diramate all'inizio. Le variabili per le quali non sono impostate priorità ricevono la priorità predefinita del risolutore (di solito pari a zero). Requisiti: * salting_priorities.values deve essere limitato. * Raming_priorities.id deve essere elementi di variablesProto.ids. |
ObjectiveBoundsProto
Limita il valore obiettivo ottimale.
Campi | |
---|---|
primal_bound |
Il risolutore afferma che il valore ottimale è uguale o migliore (minore per minimizzazione e maggiore per massimizzazione) rispetto a primal_bound fino alla tolleranza di fattibilità primale del risolutore (vedi l'avviso sotto): * primal_bound è banale (+inf per minimizzazione e -inf maximization) quando il risolutore non dichiara di avere tale limite. * primal_bound può essere più vicino al valore ottimale rispetto all'obiettivo della migliore soluzione primal fattibile. In particolare, primal_bound potrebbe non essere banale anche quando non vengono restituite soluzioni primal fattibili. Avviso: l'affermazione esatta è che esiste una soluzione primordiale che: * è numericamente fattibile (ovvero fattibile fino alla tolleranza del risolutore) e che * ha un valore obiettivo primal_bound. Questa soluzione numericamente fattibile potrebbe essere leggermente impossibile, nel qual caso primal_bound potrebbe essere strettamente migliore del valore ottimale. Tradurre una tolleranza di fattibilità primale in una tolleranza su primal_bound non è banale, soprattutto quando la tolleranza di fattibilità è relativamente grande (ad es. quando si risolve con PDLP). |
dual_bound |
Il risolutore afferma che il valore ottimale è uguale o peggiore (maggiore per minimizzazione e minore per massimizzazione) rispetto alla doppia tolleranza di fattibilità del risolutore (vedi l'avviso sotto): * dual_bound è banale (-inf per minimizzazione e +inf maximization) quando il risolutore non dichiara di avere tale limite. Analogamente a primal_bound, questo può accadere per alcuni risolutori anche se restituisci ottimale. I risolutori MIP in genere segnalano un limite anche se è impreciso. * per problemi continui, il valore dual_bound può essere più vicino al valore ottimale rispetto all'obiettivo della migliore soluzione dual_able. Per MIP, uno dei primi valori non banali di dual_bound è spesso il valore ottimale del rilassamento LP della MIP. * dual_bound dovrebbe essere migliore (più piccolo per la minimizzazione e maggiore per la massimizzazione) rispetto a primal_bound fino alle tolleranze dei risolutori (vedi l'avviso di seguito). Attenzione: * per problemi continui, l'affermazione precisa è che esiste una duplice soluzione che: * è numericamente fattibile (ovvero fattibile fino alla tolleranza del risolutore) e * abbia un valore obiettivo dual_bound. Questa soluzione numericamente fattibile potrebbe essere leggermente impossibile, nel qual caso dual_bound potrebbe essere strettamente inferiore al valore ottimale e primal_bound. Come nel caso primordiale, tradurre una tolleranza di fattibilità doppia in una tolleranza su dual_bound non è banale, soprattutto quando la tolleranza di fattibilità è relativamente grande. Tuttavia, alcuni risolutori forniscono una versione corretta del dual_bound che può essere numericamente più sicura. È possibile accedere alla versione corretta tramite l'output specifico del risolutore (ad esempio, per PDLP, pdlp_output.convergence_information. corrected_dual_objective). * Per i risolutori MIP, il valore dual_bound può essere associato a una doppia soluzione per un certo rilassamento continuo (ad es. il rilassamento LP), ma è spesso una conseguenza complessa dell'esecuzione dei risolutori ed è in genere più impreciso dei limiti riportati dai risolutori LP. |
ObjectiveProto
Campi | |
---|---|
maximize |
falso è minimo, vero è massimizza |
offset |
Deve essere limitato e non NaN. |
linear_coefficients |
Termini di ObjectiveProto lineari nelle variabili decisionali. Requisiti: * linear_coefficients.ids sono elementi di variablesProto.ids. * Il valore di ValueTrack non specificato corrisponde a zero. * I valori linear_coefficients.values devono essere tutti limitati. * Il valore di linear_coefficients.values può essere zero, ma spreca spazio. |
quadratic_coefficients |
Termini oggettivi che sono quadratici nelle variabili di decisione. Requisiti in aggiunta a quelli dei messaggi SparseDoubleMatrixProto: * Ogni elemento di quadratic_coefficients.row_ids e ogni elemento di quadratic_coefficients.column_ids deve essere un elemento di variablesProto.ids. * La matrice deve essere triangolare superiore: per ogni i, quadratic_coefficients.row_ids[i] <= quadratic_coefficients.column_ids[i]. Note: * I termini non memorizzati in modo esplicito hanno coefficiente zero. * Gli elementi di quadratic_coefficients.coefficients possono essere pari a zero, ma questo spreca solo spazio. |
name |
I messaggi principali possono avere requisiti di univocità in questo campo; ad esempio, consulta ModelProto.objectives e AuxiliaryObjectivesUpdatesProto.new_objectives. |
priority |
Per i problemi che hanno più obiettivi, la priorità di questo obiettivo rispetto agli altri (minore è più importante). Questo valore non deve essere negativo. Inoltre, ogni priorità obiettivo nel modello deve essere distinta al momento della risoluzione. Questa condizione non è convalidata a livello di proto, quindi i modelli potrebbero avere temporaneamente degli obiettivi con la stessa priorità. |
PrimalRayProto
Una direzione di miglioramento illimitato a un problema di ottimizzazione; equivalente a un certificato di non fattibilità per il duplice del problema di ottimizzazione.
Ad esempio, consideriamo un semplice programma lineare: min c * x s.t. A * x >= b x >= 0 Un raggio primole è una x che soddisfa: c * x < 0 A * x >= 0 x >= 0 Un raggio primordiale dimostra inoltre che il problema della duplice ottimizzazione è impossibile.
Nel messaggio PrimalRay riportato di seguito, variabile_values è x.
Campi | |
---|---|
variable_values |
Requisiti: * variabili_values.ids sono elementi di variablesProto.ids. * variabili_values.values devono essere tutti limitati. |
PrimalSolutionProto
Una soluzione a un problema di ottimizzazione.
Ad esempio, considera un programma lineare semplice: min c * x s.t. A * x >= b x >= 0. Una soluzione principale è l'assegnazione di valori a x. È fattibile se soddisfa A * x >= b e x >= 0 di cui sopra. Nel messaggio PrimalSolutionProto riportato di seguito, variabile_values è x e valore_obiettivo è c * x.
Campi | |
---|---|
variable_values |
Requisiti: * variabili_values.ids sono elementi di variablesProto.ids. * variabili_values.values devono essere tutti limitati. |
objective_value |
Valore obiettivo calcolato dal risolutore sottostante. Non può essere infinito o NaN. |
auxiliary_objective_values |
Valori degli obiettivi ausiliari calcolati dal risolutore sottostante. Le chiavi devono essere ID obiettivo ausiliari validi. I valori non possono essere infiniti o NaN. |
feasibility_status |
Stato di fattibilità della soluzione in base al risolutore sottostante. |
ProblemStatusProto
Stato di fattibilità del problema primordiale e del suo doppio (o doppio di un rilassamento continuo) come dichiarato dal risolutore. Il risolutore non è tenuto a restituire un certificato per la dichiarazione (ad es. il risolutore può rivendicare la fattibilità primale senza restituire una soluzione primale fattibile). Questo stato combinato fornisce una descrizione completa delle affermazioni di un risolutore sulla fattibilità e l'illimitazione del problema risolto. Ad esempio,
- uno stato fattibile per i problemi primitivi e doppi indica che il primo è fattibile e limitato e probabilmente ha una soluzione ottimale (garantita per problemi senza vincoli non lineari).
- uno stato primordiale fattibile e uno stato doppio non fattibile indicano che il problema primordiale è illimitato (ossia ha soluzioni arbitrariamente buone).
Tieni presente che un doppio stato impossibile di per sé (ad esempio accompagnato da uno stato primordiale indeterminato) non implica che il problema primordiale sia illimitato perché entrambi i problemi potrebbero essere irrealizzabili. Inoltre, anche se uno stato primordiale e doppio fattibile può suggerire l'esistenza di una soluzione ottimale, non garantisce che il risolutore abbia effettivamente trovato questa soluzione ottimale.
Campi | |
---|---|
primal_status |
Stato del problema primordiale. |
dual_status |
Stato del duplice problema (o del duplice di un rilassamento continuo). |
primal_or_dual_infeasible |
Se il problema è vero, il risolutore sostiene che il problema primordiale o il doppio non è fattibile, ma non sa quale (o se entrambi sono irrealizzabili). Può essere true solo se primal_problem_status = dual_problem_status = kUndeterminato. Queste informazioni aggiuntive sono spesso necessarie quando la pre-elaborazione determina che non esiste una soluzione ottimale al problema (ma non è in grado di determinare se il problema è dovuto a infattibilità, assenza di limitazioni o a entrambi). |
QuadraticConstraintProto
Un singolo vincolo quadratico nella forma: lb <= sum{linear_terms} + sum{quadratic_terms} <= ub.
Se una variabile coinvolta in questo vincolo viene eliminata, viene trattata come se fosse impostata su zero.
Campi | |
---|---|
linear_terms |
Termini lineari nelle variabili decisionali. Oltre ai requisiti sui messaggi SparseDoubleVectorProto, richiediamo che: * linear_terms.ids sono elementi di variablesProto.ids. * Linear_terms.values deve essere tutti finito e non NAN. Note: * Gli ID variabili omessi hanno un coefficiente corrispondente pari a zero. * linear_terms.values può essere zero, ma spreca spazio. |
quadratic_terms |
Termini quadratici nelle variabili di decisione. Oltre ai requisiti sui messaggi SparseDoubleMatrixProto, richiediamo i seguenti requisiti: * Ogni elemento di quadratic_terms.row_ids e ogni elemento di quadratic_terms.column_id deve essere un elemento di variablesProto.ids. * La matrice deve essere triangolare superiore: per ogni i, quadratic_terms.row_ids[i] <= quadratic_terms.column_ids[i]. Note: * I termini non memorizzati in modo esplicito hanno coefficiente zero. * Gli elementi di quadratic_terms.coefficients possono essere pari a zero, ma questo comporta solo uno spreco di spazio. |
lower_bound |
Deve avere un valore in [-inf, inf) ed essere minore o uguale a |
upper_bound |
Deve avere un valore in (-inf, inf] ed essere maggiore o uguale a |
name |
I messaggi principali potrebbero avere requisiti di univocità in questo campo; ad esempio, consulta ModelProto.quadratic_constraints e QuadraticConstraintUpdatesProto.new_constraints. |
SecondOrderConeConstraintProto
Un singolo vincolo cono del secondo ordine nella forma:
||arguments_to_norm
||_2 <= upper_bound
,
dove upper_bound
e ogni elemento di arguments_to_norm
sono espressioni lineari.
Se una variabile coinvolta in questo vincolo viene eliminata, viene trattata come se fosse impostata su zero.
Campi | |
---|---|
upper_bound |
|
arguments_to_norm[] |
|
name |
I messaggi principali potrebbero avere requisiti di univocità in questo campo; ad esempio, vedi |
SolutionHintProto
Una soluzione di partenza suggerita per il risolutore.
I risolutori MIP di solito vogliono solo informazioni primali (variable_values
), mentre i risolutori LP vogliono informazioni sia primali che doppie (dual_values
).
Molti risolutori MIP possono lavorare con: (1) soluzioni parziali che non specificano tutte le variabili o (2) soluzioni non attuabili. In questi casi, i risolutori di solito risolvono un MIP secondario per completare/correggere il suggerimento.
Il modo in cui il suggerimento viene utilizzato dal risolutore dipende molto dal risolutore, dal tipo di problema e dall'algoritmo utilizzato. Il modo più affidabile per assicurarsi che il suggerimento abbia effetto è leggere i log dei risolutori sottostanti con e senza il suggerimento.
I risolutori LP Simplex di solito preferiscono una base iniziale a un suggerimento di soluzione (in caso contrario, devono eseguire il crossover per convertire il suggerimento in una soluzione di base fattibile).
Campi | |
---|---|
variable_values |
Un'assegnazione potenzialmente parziale di valori alle variabili primali del problema. I requisiti indipendenti dal risolutore per questo messaggio secondario sono: * variabili_values.id sono elementi di variablesProto.ids. * variabili_values.values devono essere tutti limitati. |
dual_values |
Un'assegnazione (potenzialmente parziale) di valori ai vincoli lineari del problema. Requisiti: * dual_values.id sono elementi di LinearConstraintsProto.ids. * dual_values.values devono essere tutti limitati. |
SolutionProto
Gli elementi inclusi in una soluzione dipendono dal tipo di problema e dal risolutore. Gli attuali pattern comuni sono 1. I risolutori MIP restituiscono solo una soluzione primitiva. 2. I risolutori LP Simplex spesso restituiscono una base e le soluzioni primali e doppie associate a questa base. 3. Altri risolutori continui spesso restituiscono una soluzione doppia e primale connessa in modo dipendente dal risolutore.
Requisiti: * deve essere impostato almeno un campo. La soluzione non può essere vuota.
Campi | |
---|---|
primal_solution |
|
dual_solution |
|
basis |
SolutionStatusProto
Fattibilità di una soluzione originale o doppia secondo il risolutore.
Enum | |
---|---|
SOLUTION_STATUS_UNSPECIFIED |
Valore di Guard che non rappresenta alcuno stato. |
SOLUTION_STATUS_UNDETERMINED |
Il risolutore non dichiara lo stato di fattibilità. |
SOLUTION_STATUS_FEASIBLE |
Il risolutore afferma che la soluzione è fattibile. |
SOLUTION_STATUS_INFEASIBLE |
Il risolutore afferma che la soluzione non è fattibile. |
SolveParametersProto
Parametri per controllare una singola risoluzione.
Contiene entrambi i parametri comuni a tutti i risolutori, ad es. time_limit, e i parametri di un risolutore specifico, ad esempio gscip. Se un valore viene impostato sia nel campo comune sia nel campo specifico del risolutore, viene utilizzata l'impostazione specifica del risolutore.
I parametri comuni facoltativi e non impostati o un'enumerazione con valore non specificato indicano che viene utilizzato il valore predefinito del risolutore.
I parametri specifici del risolutore per risolutori diversi da quello in uso vengono ignorati.
I parametri che dipendono dal modello (ad es. la priorità di diramazione è impostata per ogni variabile) vengono passati in ModelSolveParametersProto.
Campi | |
---|---|
time_limit |
Tempo massimo che un risolutore deve dedicare al problema (oppure infinito, se non impostato). Questo valore non è un limite fisso. Il tempo di risoluzione potrebbe superare leggermente questo valore. Questo parametro viene sempre passato al risolutore sottostante, pertanto non viene utilizzato il valore predefinito del risolutore. |
enable_output |
Consente di stampare le tracce di implementazione del risolutore. La posizione di queste tracce dipende dal risolutore. Per SCIP e Gurobi si tratta degli stream di output standard. Per Glop e CP-SAT, verrà visualizzato LOG(INFO). Tieni presente che se il risolutore supporta il callback del messaggio e l'utente registra un callback, questo valore di parametro viene ignorato e non viene stampata alcuna traccia. |
lp_algorithm |
L'algoritmo per la risoluzione di un programma lineare. Se LP_ALGORITHM_UNSPECIFIED, utilizza l'algoritmo predefinito del risolutore. Per i problemi che non sono programmi lineari ma in cui la programmazione lineare è una sottoroutine, i risolutori possono utilizzare questo valore. Ad esempio, i risolutori MIP in genere la utilizzano solo per la risoluzione LP principale (in caso contrario utilizzano il dual Simplex). |
presolve |
Sforzati di semplificare il problema prima di iniziare l'algoritmo principale o il livello di sforzo predefinito del risolutore se TOPIC_UNSPECIFIED. |
cuts |
Cerca di ottenere un maggiore rilascio LP (solo MIP) o il livello di sforzo predefinito del risolutore se TOPIC_UNSPECIFIED. NOTA: la disattivazione delle interruzioni potrebbe impedire ai callback di aggiungere interruzioni a MIP_NODE, questo comportamento è specifico per il risolutore. |
heuristics |
Tentativo di trovare soluzioni realizzabili oltre a quelle incontrate nella procedura di ricerca completa (solo MIP) o al livello di sforzo predefinito del risolutore se TOPIC_UNSPECIFIED. |
scaling |
Sforzo di riscalare il problema per migliorare la stabilità numerica o il livello di sforzo predefinito del risolutore se TOPIC_UNSPECIFIED. |
iteration_limit |
Limitare le iterazioni dell'algoritmo sottostante (ad es. pivot Simplex). Il comportamento specifico dipende dal risolutore e dall'algoritmo utilizzati, ma spesso può fornire un limite di risoluzione deterministico (potrebbe essere necessaria un'ulteriore configurazione, ad esempio un thread). Tipicamente supportato dai risolutori LP, QP e MIP, ma per i risolutori MIP vedi anche node_limit. |
node_limit |
Limite al numero di sottoproblemi risolti nella ricerca enumerativa (ad es. ramo e legato). Per molti risolutori, può essere utilizzata per limitare in modo deterministico il calcolo (potrebbe essere necessaria un'ulteriore configurazione, ad esempio un thread). Solitamente per i risolutori MIP, vedi anche itration_limit. |
cutoff_limit |
Il risolutore si ferma presto se è in grado di dimostrare che non esistono soluzioni primordiali valide almeno quanto il valore limite. In caso di interruzione anticipata, il risolutore restituisce il motivo della risoluzione NO_SOLUTION_FOUND e il limite CUTOFF e non è necessario fornire ulteriori informazioni sulla soluzione. Non ha alcun effetto sul valore restituito in assenza di un'interruzione anticipata. Ti consigliamo di utilizzare una tolleranza se vuoi che vengano restituite soluzioni con lo scopo esattamente uguale al limite massimo. Consulta la guida dell'utente per maggiori dettagli e un confronto con best_bound_limit. |
objective_limit |
Il risolutore si ferma presto non appena trova una soluzione almeno questa buona, con un motivo di risoluzione FEASIBILE e un limite OBIETTIVO. |
best_bound_limit |
Il risolutore si ferma presto non appena dimostra che il limite migliore è almeno questo buono, con il motivo della risoluzione FEASIBLE o NO_SOLUTION_FOUND e il limite OBJECTIVE. Consulta la guida dell'utente per maggiori dettagli e un confronto con cutoff_limit. |
solution_limit |
Il risolutore si ferma presto dopo aver trovato queste tante soluzioni fattibili, con il motivo della risoluzione FEASIBILE e la SOLUZIONE limitata. Deve essere maggiore di zero, se impostato. Spesso viene utilizzato per indurre il risolutore a fermarsi sulla prima soluzione possibile trovata. Tieni presente che non esiste alcuna garanzia sul valore obiettivo per nessuna delle soluzioni restituite. I risolutori solitamente non restituiscono più soluzioni rispetto al limite consentito, ma questo non viene applicato da MathOpt, vedere anche b/214041169. Attualmente supportato per Gurobi e SCIP e per CP-SAT solo con valore 1. |
threads |
Se impostato, deve essere >= 1. |
random_seed |
Genera il generatore di numeri pseudo-casuali nel risolutore sottostante. Tieni presente che tutti i risolutori usano numeri pseudo-casuali per selezionare elementi come le perturbazioni nell'algoritmo LP, per le regole di tie-breaking e per le correzioni euristiche. Variare questa condizione può avere un impatto notevole sul comportamento del risolutore. Sebbene tutti i risolutori abbiano un concetto di origine, tieni presente che i valori validi dipendono dal risolutore effettivo. - Gurobi: [0:GRB_MAXINT] (che a partire da Gurobi 9.0 è 2x10^9). - GSCIP: [0:2147483647] (che è MAX_INT o kint32max o 2^31-1). - GLOP: [0:2147483647] (come sopra) In tutti i casi, il risolutore riceverà un valore uguale a: MAX(0, MIN(MAX_VALID_VALUE_FOR_SOLVER, random_seed)). |
absolute_gap_tolerance |
Una tolleranza assoluta di ottimizzazione (principalmente) per i risolutori MIP. Il GAP assoluto è il valore assoluto della differenza tra: * il valore obiettivo della migliore soluzione possibile trovata, * il doppio vincolo prodotto dalla ricerca. Il risolutore può arrestarsi quando il GAP assoluto raggiunge al massimo absolute_gap_sustainability (se impostata) e restituire TERMINATION_REASON_OPTIMAL. Deve essere >= 0, se impostato. Vedi anche relative_gap_Tolleranza. |
relative_gap_tolerance |
Una tolleranza di ottimizzazione relativa (principalmente) per i risolutori MIP. Il GAP relativo è una versione normalizzata del GAP assoluto (definito sulla tolleranza assoluta_gap), in cui la normalizzazione dipende dal risolutore, ad esempio il GAP assoluto diviso per il valore obiettivo della soluzione migliore trovata. Il risolutore può arrestarsi quando il GAP relativo raggiunge al massimo relative_gap_sustainability (se impostato) e restituire TERMINATION_REASON_OPTIMAL. Deve essere >= 0, se impostato. Vedi anche assoluta_tolleranza_gap. |
solution_pool_size |
Gestisci fino a |
SolveResultProto
Il contratto relativo ai casi in cui le soluzioni/raggi primali/doppi sono complessi, vedi terminazioni_reasons.md per una descrizione completa.
Fino a quando non viene finalizzato un contratto esatto, è più sicuro semplicemente verificare se è presente una soluzione o un raggio, anziché basarsi sul motivo della risoluzione.
Campi | |
---|---|
termination |
Il motivo per cui il risolutore si è interrotto. |
solutions[] |
Il contratto generale per definire l'ordine delle soluzioni che i futuri risolutori dovrebbero implementare prevede che: 1. Le soluzioni con una soluzione possibile primordiale, ordinate per primo in base al miglior obiettivo primario. 2. Le soluzioni con una duplice soluzione fattibile, ordinate per migliore duplice obiettivo (il duplice obiettivo sconosciuto è il peggiore) 3. Tutte le soluzioni rimanenti possono essere restituite in qualsiasi ordine. |
primal_rays[] |
Istruzioni per il miglioramento primordiale illimitato, o, equivalentemente, per i certificati di fattibilità doppi. Di solito fornito per ResolutionReasonProtos UNBOUNDED e DUAL_INFEASIBLE |
dual_rays[] |
Istruzioni per il doppio miglioramento illimitato o, equivalentemente, per certificati di fattibilità primitivi. Di solito viene fornito per Motivo della Estinzione Proto INFEASIBILE. |
solve_stats |
Statistiche sul processo di risoluzione, ad esempio tempo di esecuzione, iterazioni. |
SolveStatsProto
Campi | |
---|---|
solve_time |
Tempo trascorso come misurato da math_opt, più o meno il tempo all'interno di Solver::Solve(). Nota: non è incluso il lavoro di creazione del modello. |
problem_status |
Stati di fattibilità per problemi primali e doppi. |
simplex_iterations |
|
barrier_iterations |
|
first_order_iterations |
|
node_count |
|
SolverTypeProto
I risolutori supportati da MathOpt.
Enum | |
---|---|
SOLVER_TYPE_UNSPECIFIED |
|
SOLVER_TYPE_GSCIP |
Solving Constraint Integer Programs (SCIP) risolutore (di terze parti). Supporta problemi quadratici con numeri interi non convessi, LP, MIP. Tuttavia, non vengono restituiti dati dual per gli LP. Preferisco GLOP per gli LP. |
SOLVER_TYPE_GUROBI |
Risolutore Gurobi (terza parte). Supporta problemi quadratici con numeri interi non convessi, LP, MIP. Di solito è l'opzione più veloce, ma ha una licenza speciale. |
SOLVER_TYPE_GLOP |
Il risolutore Glop di Google. Supporta LP con metodi primal e dual Simplex. |
SOLVER_TYPE_CP_SAT |
Il risolutore CP-SAT di Google. Supporta problemi in cui tutte le variabili sono numeri interi e limitate (o implicite in modo che siano successive alla prerisoluzione). Supporto sperimentale per ridimensionare e distinguere i problemi con variabili continue. |
SOLVER_TYPE_PDLP |
Il risolutore PDLP di Google. Supporta obiettivi quadratici con diagonale LP e diagonale. Utilizza i metodi del primo ordine anziché il Simplex. È in grado di risolvere problemi molto grandi. |
SOLVER_TYPE_GLPK |
GNU Linear Programming Kit (GLPK) (di terze parti). Supporta MIP e LP. Sicurezza Thread: GLPK utilizza l'archiviazione locale dei thread per le allocazioni della memoria. Di conseguenza, le istanze del risolutore devono essere eliminate nello stesso thread in cui vengono create, altrimenti GLPK si arresta in modo anomalo. Sembra corretto chiamare Solver::Solve() da un altro thread rispetto a quello utilizzato per creare il Risolutore, ma non è documentato da GLPK e dovrebbe essere evitato. Quando si risolve un LP con il presolver, la soluzione (e i raggi non associati) vengono restituiti solo se è stata trovata una soluzione ottimale. In caso contrario, non viene restituito nulla. Vedi glpk-5.0/doc/glpk.pdf pagina #40 disponibile su glpk-5.0.tar.gz per maggiori dettagli. |
SOLVER_TYPE_OSQP |
Il risolutore OSQP (Operations Splitting Quadratic Program) (di terze parti). Supporta problemi continui con vincoli lineari e obiettivi quadratici lineari o convessi. Utilizza il metodo del primo ordine. |
SOLVER_TYPE_ECOS |
Il risolutore conico incorporato (ECOS) (di terze parti). Supporta problemi LP e SOCP. Utilizza metodi con punti interni (barriera). |
SOLVER_TYPE_SCS |
Il risolutore SCS (Splitting Conic Risolutore) (di terze parti). Supporta problemi LP e SOCP. Utilizza il metodo del primo ordine. |
SOLVER_TYPE_HIGHS |
Il risolutore HiGHS (di terze parti). Supporta problemi LP e MIP (le QP convessi non sono implementate). |
SOLVER_TYPE_SANTORINI |
Implementazione di riferimento di MathOpt con un risolutore MIP. Lenta/non consigliata per la produzione. Non è un risolutore LP (non sono state restituite due informazioni). |
SosConstraintProto
Dati per la rappresentazione di un singolo vincolo SOS1 o SOS2.
Se una variabile coinvolta in questo vincolo viene eliminata, viene trattata come se fosse impostata su zero.
Campi | |
---|---|
expressions[] |
Le espressioni a cui applicare il vincolo SOS: * SOS1: al massimo un elemento prende un valore diverso da zero. * SOS2: al massimo due elementi assumono valori diversi da zero e devono essere adiacenti nell'ordine ripetuto. |
weights[] |
È vuoto o di lunghezza uguale alle espressioni. Se vuoto, le ponderazioni predefinite sono 1, 2, ... Se presente, le voci devono essere univoche. |
name |
I messaggi principali possono avere requisiti di univocità in questo campo; ad esempio, vedi ModelProto.sos1_constraints e SosConstraintUpdatesProto.new_constraints. |
SparseBasisStatusVector
Una rappresentazione sparsa di un vettore di stati di base.
Campi | |
---|---|
ids[] |
Devono essere ordinati (in ordine crescente) con tutti gli elementi distinti. |
values[] |
La lunghezza deve essere uguale agli ID. |
SparseDoubleMatrixProto
Una rappresentazione sparsa di una matrice di doppi.
La matrice è memorizzata come tripli di ID riga, ID colonna e coefficiente. Questi tre vettori devono avere la stessa lunghezza. Per tutti i valori i, la tupla (id_riga[i], id_colonna[i]) deve essere distinta. Le voci devono essere in ordine principale di riga.
Campi | |
---|---|
row_ids[] |
|
column_ids[] |
|
coefficients[] |
Non può contenere NaN. |
SparseDoubleVectorProto
Una rappresentazione sparsa di un vettore di doppi.
Campi | |
---|---|
ids[] |
Devono essere ordinati (in ordine crescente) con tutti gli elementi distinti. |
values[] |
La lunghezza deve essere uguale agli ID. Non può contenere NaN. |
SparseInt32VectorProto
Una rappresentazione sparsa di un vettore di interi.
Campi | |
---|---|
ids[] |
Deve essere ordinato (in ordine crescente) con tutti gli elementi distinti. |
values[] |
La lunghezza deve essere uguale agli ID. |
SparseVectorFilterProto
Questo messaggio consente di interrogare/impostare parti specifiche di uno SparseXxxxVector. Il comportamento predefinito non prevede l'esclusione di nulla. Un utilizzo comune è eseguire query solo su parti di soluzioni (solo valori diversi da zero e/o solo un insieme selezionato di valori di variabili).
Campi | |
---|---|
skip_zero_values |
Per SparseBoolVectorProto il valore "zero" è |
filter_by_ids |
Se true, restituisci solo i valori corrispondenti agli ID elencati in filter_id. |
filtered_ids[] |
L'elenco di ID da utilizzare quando il valore di filter_by_id è true. Deve essere vuoto quando il valore di filter_by_id è false. NOTA: se è vuoto e il valore di filter_by_ids è true, significa che non vuoi ricevere informazioni nel risultato. |
TerminationProto
Tutte le informazioni sul motivo per cui una chiamata a Solve() è stata terminata.
Campi | |
---|---|
reason |
Informazioni aggiuntive in |
limit |
È LIMIT_UNSPECIFIED, a meno che il motivo non sia TERMINATION_REASON_FEASIBLE o TERMINATION_REASON_NO_SOLUTION_FOUND. Non tutti i risolutori sono in grado di determinare sempre il limite che ha causato la risoluzione. Se non è possibile determinarne la causa, viene utilizzato LIMIT_UNDETERMINED. |
detail |
Informazioni aggiuntive tipicamente specifiche per il risolutore in merito alla risoluzione. |
problem_status |
Stati di fattibilità per problemi primali e doppi. A partire dal 18 luglio 2023, questo messaggio potrebbe non essere presente. Se mancante, il valore problem_status si trova in SolveResultProto.solve_stats. |
objective_bounds |
Limita il valore obiettivo ottimale. A partire dal 18 luglio 2023, questo messaggio potrebbe non essere presente. Se mancante, il campo goal_bounds.primal_bound si trova in SolveResultProto.solve.stats.best_primal_bound e object_bounds.dual_bound sono disponibili in SolveResultProto.solve.stats.best_dual_bound |
TerminationReasonProto
Il motivo per cui una chiamata a Solve() viene terminata.
Enum | |
---|---|
TERMINATION_REASON_UNSPECIFIED |
|
TERMINATION_REASON_OPTIMAL |
È stata trovata una soluzione ottimale (fino a tolleranze numeriche). |
TERMINATION_REASON_INFEASIBLE |
Il problema primordiale non ha soluzioni attuabili. |
TERMINATION_REASON_UNBOUNDED |
Il problema primordiale è fattibile e si possono trovare soluzioni arbitrariamente buone lungo un raggio primordiale. |
TERMINATION_REASON_INFEASIBLE_OR_UNBOUNDED |
Il problema primordiale è impossibile o illimitato. Ulteriori dettagli sullo stato del problema potrebbero essere disponibili in solve_stats.problem_status. Tieni presente che lo stato illimitato di Gurobi potrebbe essere mappato qui. |
TERMINATION_REASON_IMPRECISE |
Il problema è stato risolto con uno dei criteri di cui sopra (Ottimal, Infeasible, Illimitata o InfeasibleOrUnbounded), ma una o più tolleranze non sono state soddisfatte. Alcune soluzioni/raggi primitivi/doppi sono presenti, ma saranno leggermente inattuabili oppure (se il problema era quasi ottimale) potrebbero esserci un divario tra il miglior obiettivo della soluzione e il migliore vincolo per l'obiettivo. Gli utenti possono comunque eseguire query su soluzioni/raggi e statistiche di soluzioni primarie/due, ma sono responsabili della gestione dell'imprecisione numerica. |
TERMINATION_REASON_FEASIBLE |
L'ottimizzatore ha raggiunto un qualche tipo di limite e viene restituita una soluzione prima possibile. Consulta SolveResultProto.limit_detail per una descrizione dettagliata del tipo di limite che è stato raggiunto. |
TERMINATION_REASON_NO_SOLUTION_FOUND |
L'ottimizzatore ha raggiunto un qualche tipo di limite e non ha trovato una soluzione inizialmente fattibile. Consulta SolveResultProto.limit_detail per una descrizione dettagliata del tipo di limite che è stato raggiunto. |
TERMINATION_REASON_NUMERICAL_ERROR |
L'algoritmo si è interrotto perché si è verificato un errore numerico irreversibile. Nessuna informazione sulla soluzione disponibile. |
TERMINATION_REASON_OTHER_ERROR |
L'algoritmo si è interrotto a causa di un errore non contemplato da uno degli stati definiti sopra. Nessuna informazione sulla soluzione disponibile. |
VariablesProto
Come utilizzato di seguito, definiamo "#variables" = size(VariablesProto.ids).
Campi | |
---|---|
ids[] |
Deve essere un numero non negativo ed essere necessariamente in aumento. Impossibile utilizzare il valore max(int64). |
lower_bounds[] |
Deve avere lunghezza uguale a #variables, valori in [-inf, inf). |
upper_bounds[] |
Deve avere lunghezza uguale a #variables, valori in (-inf, inf]. |
integers[] |
La lunghezza deve essere uguale a #variables. Il valore è false per le variabili continue e true per le variabili numeri interi. |
names[] |
Se non impostato, si presume che siano tutte stringhe vuote. In caso contrario, la lunghezza deve essere uguale a #variables. Tutti i nomi non vuoti devono essere distinti. |