`hs87` differs from Hock–Schittkowski and CUTEs in two constraints and the objective

Aperta
#480 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
45/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
julia

Direzione di ricerca

Start with src/ADNLPProblems/hs87.jl and compare its constraints and piecewise objective with the linked HS87.SIF and CUTEst references; inspect the corresponding PureJuMP implementation for the breakpoint and Inf behavior. Check the metadata for the notes and :best_known_upper_bound as well. Done means the two constraints, objective behavior, and metadata agree with the stated references and the reported values are valid for the corrected problem.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug

Here's what Hock-Schittkowski and CUTEst use for the constraints:

Image

This package differs for two of them:

The remaining violation in the SIF formulation comes from b. With Colville's b = 1.48477 instead of the printed 1.48577, all four constraints at x* are below 1e-4 (see CUTEst's COLVILLE6, and ralna/SIF@8832f70 for the sources). The constants d and e are cos and sin of b - 0.00889 with b = 1.48477. #478 adds colville6. With the two errors above fixed, hs87 would equal CUTEst's HS87.

The piecewise-linear objective is also handled differently at the breakpoints. HS87.SIF uses 30 x1 for x1 < 300 and 31 x1 for x1 ≥ 300, and 28 x2, 29 x2, 30 x2 on [0, 100), [100, 200) and [200, ∞).

  • ADNLPProblems writes f1 and f2 as sums of indicator products with closed intervals, so both pieces count at a breakpoint. At x = (300, 50, …) it returns 19700, where SIF gives 10700 and PureJuMP gives 10400. At x2 = 100 and x2 = 200 it returns 57 x2 and 59 x2.
  • PureJuMP's if/elseif chain picks the lower piece at each breakpoint. SIF picks the upper piece.
  • Outside the pieces' ranges, which are also outside the variable bounds, both versions try to return Inf. In PureJuMP, f1 calls eltype(x)(Inf), where x is the vector of JuMP variables. That throws MethodError: no method matching VariableRef(::Float64) whenever the operator is evaluated with x1 > 400 or x1 < 0. f2 uses eltype(t) and does not have this problem.

Smaller metadata points: the notes contain a second, unrelated classification line (PLR-AN-5-10), and :best_known_upper_bound is Inf. The SOLTN value in HS87.SIF is 8927.5977. hs87's objective at x* is 8927.5964, but x* is not feasible for b = 1.48577, so that value is not a valid upper bound for this problem.

Lingua principale
Julia
Stelle
90
Fork
48
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di JuliaSmoothOptimizers/OptimizationProblems.jl

Tutte le issue di JuliaSmoothOptimizers/OptimizationProblems.jl

Issue simili

Altre issue su Julia

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.