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

オープン
#480 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
45/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
活発
技術スタック
julia

調査の方向性

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.

索引モデルが issue の本文から書いたものです。

説明

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.

主要言語
Julia
スター
90
フォーク
48
PR マージ指標
30日以内にマージされた PR はありません

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

JuliaSmoothOptimizers/OptimizationProblems.jl のほかの issue

JuliaSmoothOptimizers/OptimizationProblems.jl の issue をすべて見る

似ている issue

Julia の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。