6. 更新履歴

6.1. [1.1.1] - 2020-06-08

Added

  • #883

    Collection メソッドのサポート

    collections.abc.Collection がサポートするメンバ __contains__, __len__, __iter__ を ParameterTableVariableExpressionConstraint, のすべてがサポートするようになりました.

Fixed

  • #933

    添字が逆転する演算を間違う

    j*x[i,j] のように,変数の添字に対して演算結果の添字が逆転する場合に計算結果を誤る不具合を修正しました.

    >>> i = Element(value='XY', name='i')
    >>> j = Element(value=[1, 2], name='j')
    >>> x = Variable(index=(i,j), name='x')
    >>> j*x[i,j]  # Index(j,i)
    (j*x[i,j]):
    x['X',1]
    x['Y',1]
    2*x['X',2]
    2*x['Y',2]
    
  • PYSIMPLE-181

    範囲関数の範囲重複判定の厳密化

    範囲関数の範囲に同じ添字を含んでいてもスライス単位で重複していなければ許可されるようになりました.

  • PYSIMPLE-184

    特定の式に対する二項演算ができない

    特定の変数・式同士の二項演算ができない不具合を修正しました.

6.2. [1.1.0] - 2020-03-02

PySIMPLE 1.1.0 では式展開が劇的に高速化されました. 1.0.1 と比較して 10 倍以上の高速化を達成し,SIMPLE と比較しても遜色のない速度になりました.

また,Nuorium も外部コマンドの実行に対応し, Nuorium 上で PySIMPLE が動作するようになりました.→ 数理計画問題を解く

動作環境も Linux,Mac がサポートされるようになり,最新の Python 3.8 にも対応しました.

Added

  • PYSIMPLE-140

    Linux,Mac 版

    Linux,Mac 版に対応しました.

  • PYSIMPLE-158

    Python 3.8 対応

    Python 3.8 に対応しました.

  • PYSIMPLE-157

    Set のスライス

    __getitem__ の引数にスライスオブジェクトが対応しました.

    >>> I = Set(value=[1,2,3], name='I')
    >>> I
    Set(name='I', value=[1, 2, 3])
    >>> I[:-1]
    Set(name='I[:-1]', value=[1, 2])
    
  • #839

    求解オプションの初期化

    設定した求解オプションを del 文で初期値に戻すことができるようになりました.

    >>> p = Problem()
    >>> print(p.options.maxTime)
    None
    >>> p.options.maxTime = 1
    >>> p.options.maxTime
    1
    >>> del p.options.maxTime
    >>> print(p.options.maxTime)
    None
    

    また,del p.options ですべての求解オプションを初期値に戻すことができます. 詳細は 求解オプション をご確認ください.

  • PYSIMPLE-80

    mpsout

    Problem に mpsout メソッドが追加されました.詳細は mpsout をご確認ください.

Changed

  • PYSIMPLE-153

    bound 周りの仕様

    lbub 属性は immutable になり, bound 制約は制約式に一本化されました. これにより変数,制約式の dual が正しく取得できます.

    >>> i = Element(value=[1,2], name='i')
    >>> x = Variable(index=i, lb=15, name='x')
    >>> x.lb
    x[1].lb=15
    x[2].lb=15
    >>> p = Problem()
    >>> p += x[i] >= i*10, 'cons'
    >>> x.lb
    x[1].lb=15
    x[2].lb=15
    >>> p += Sum(x[i])
    >>> p.solve(silent=True)
    1
    >>> x.val
    x[1].val=15.000000041666626
    x[2].val=20.000000041666624
    >>> x.dual
    x[1].dual=1.0
    x[2].dual=0.0
    >>> p['cons'].dual
    cons[1].dual=0.0
    cons[2].dual=1.0
    
Removed

  • PYSIMPLE-167

    Python 3.5 サポート

    Python 3.5 は非対応となりました.

Fixed

  • #805

    多次元集合の一部メソッドの引数制限

    実装の都合により,多次元集合に対する __getitem__nextprev の引数に element-like を禁止します. index では可能です.

    >>> IJ = Set(value=[(1,2), (3,4), (5,6)], name='IJ')
    >>> i = Element(value=[0,2], name='i')
    >>> IJ[0]
    (1, 2)
    >>> IJ[i]
    TypeError: cannot apply IJ[i] to multidimensional Set
    >>> ij = Element(value=[(3,4)], name='ij')
    >>> IJ.next((3,4))
    (5, 6)
    >>> IJ.next(ij)
    TypeError: cannot apply IJ.next(ij) to multidimensional Set
    >>> IJ.index((3,4))
    1
    >>> IJ.index(ij)
    IJ.index(ij)[3,4]=1
    
  • #852

    Parameter * Variable/Expression の添字順

    Parameter * Variable/Expression の演算結果のインデックス順を出現順にしました.

    >>> i = Element(value=[1,2], name='i')
    >>> j = Element(value=[3,4], name='j')
    >>> a = Parameter(index=(i,j), name='a')
    >>> x = Variable(index=j, name='x')
    >>> a[i,j] = 10*i+j
    >>> ax = a[i,j]*x[j]
    >>> ax
    (a[i,j]*x[j]):
    13*x[3]
    14*x[4]
    23*x[3]
    24*x[4]
    >>> ax.index
    Index(i,j)
    
  • PYSIMPLE-69

    目的関数の定数値の処理

    目的関数に定数項が存在した場合,求解情報や optValue に反映されない 不具合を修正しました.objective の val 属性は今まで通り正しい値が入ります.

    >>> i = Element(value=[1,2])
    >>> x = BinaryVariable(index=i)
    >>> p = Problem(type=max)
    >>> p += Sum(x[i]) + 10
    >>> p.solve()
    
    VALUE_OF_OBJECTIVE                                         12
    
    >>> p.result.optValue
    12.0
    >>> p.objective.val
    12
    
  • PYSIMPLE-76

    IPython 環境から実行した場合の出力先

    求解情報がコンソールに出力される不具合を修正しました.

  • PYSIMPLE-137

    silent=True で主要なインタプリタから求解できない

    IDLE や IPython などのインタプリタ上で silent=True で求解できない不具合を修正しました.

6.3. [1.0.1] - 2019-07-01

Fixed

  • PYSIMPLE-104

    目的関数に与えていない変数の初期値が変わる

    一部を目的関数に与えた変数のうち,与えていない部分の値が変わる不具合を修正しました.

    >>> p = Problem()
    >>> i = Element(value=[1,2], name='i')
    >>> x = Variable(index=i, lb=1, init=2, name='x')
    >>> x.val
    x[1].val=2
    x[2].val=2
    >>> p += x[2]
    >>> p.solve(silent=True)
    1
    >>> x.val
    x[1].val=2  # 2 のままになるようにした
    x[2].val=1.0000000002083331
    
  • PYSIMPLE-117

    範囲演算における戻り値のインデックス順

    範囲演算における戻り値のインデックス順を出現順にしました.

    >>> ij = Element(value=[(1,3), (1,4), (2,3)], name='ij')
    >>> i = Element(set=ij.set(0), name='i')
    >>> j = Element(set=ij.set(1), name='j')
    >>> y = Variable(index=(i,j), name='y')
    >>> y[i,j] = 10*i+j
    >>> y.val
    y[1,3].val=13
    y[1,4].val=14
    y[2,3].val=23
    y[2,4].val=24
    >>> Sum(y[ij(0),j], ij(0)).index
    Index(ij(1),j)  # 以前は (j,ij(1)) だった
    >>> Sum(y[ij(0),j], ij(0))
    Sum(y[ij(0),j], ij(0)):
    y[1,3]+y[2,3]
    y[1,4]+y[2,4]
    y[1,3]
    y[1,4]
    >>> Sum(y[ij(0),j], ij(0)).val
    Sum(y[ij(0),j], ij(0))[3,3].val=36
    Sum(y[ij(0),j], ij(0))[3,4].val=38
    Sum(y[ij(0),j], ij(0))[4,3].val=13
    Sum(y[ij(0),j], ij(0))[4,4].val=14
    
  • PYSIMPLE-119

    範囲関数の範囲に空集合が含まれていたときの値

    挙動を SIMPLE に合わせました.

    >>> i0 = Element(value=[], name='i0')
    >>> i1 = Element(value=[1], name='i1')
    >>> y = Variable(index=(i0,i1), name='y')
    >>> Sum(y[i0,i1], i0)
    Sum(y[i0,i1], i0):
    0
    >>> Sum(y[i0,i1], i1)
    Sum(y[i0,i1], i1):
    # 空の式が返るようにした
    >>> Sum(y[i0,i1], (i0,i1))
    Sum(y[i0,i1], (i0,i1)):
    0
    
  • PYSIMPLE-125

    Parameter を含むアクセスをした式の表示

    少し複雑なアクセスを含む式の表示がおかしくなる不具合を修正しました.

    >>> i = Element(value=[1,2,3], name='i')
    >>> x = Variable(index=i, name='x')
    >>> t = Element(value=[1,2], name='t')
    >>> x[t]
    x:
    x[1]
    x[2]
    >>> x[t+1]
    x[(t+1)[t]]:
    x[(t+1)[t]][1]
    x[(t+1)[t]][2]
    >>> x[t+1]+1
    (x[(t+1)[t]][t]+1):
    x[2]+1
    x[3]+1
    >>> x[t] + x[t+1]
    (x[t]+x[(t+1)[t]][t]):
    x[1]+x[2]
    x[2]+x[3]
    >>> x[t+1] + x[t]
    (x[(t+1)[t]][t]+x[t]):
    x[1]+x[2]
    x[2]+x[3]
    

6.4. [1.0.0] - 2019-03-08

リリース