5.4. 演算

5.4.1. 単項演算

pysimple.__pos__(obj: ObjExp) Parameter | Expression

単項演算 +obj を返します.

パラメータ

obj (ObjExp) --

戻り値

obj が ObjPrm の場合は Parameter を,それ以外の場合は Expression を返します.

戻り値の型

Parameter or Expression

pysimple.__neg__(obj: ObjExp) Parameter | Expression

単項演算 -obj を返します.

パラメータ

obj (ObjExp) --

戻り値

obj が ObjPrm の場合は Parameter を,それ以外の場合は Expression を返します.

戻り値の型

Parameter or Expression

5.4.2. 算術演算

Set.__sub__(rset: Iterable[DType | Key]) Set

Set に含まれて rset に含まれない集合を返します.

パラメータ

rset (Iterable[DType | Key]) -- Set や set でなくても構いません.

戻り値の型

Set

サンプル

>>> I = Set(value=[1,2,3,4], name='I')
>>> J = Set(value=[2,4,6,8], name='J')
>>> I - J
Set(name='(I-J)', value=[1, 3])
>>> I - {2,4,6,8}
Set(name='(I-{8, 2, 4, 6})', value=[1, 3])
>>> I - [2,4,6,8]
Set(name='(I-[2, 4, 6, 8])', value=[1, 3])
Set.__mul__(rset: Iterable[DType | Key]) Set

Set と rset の直積集合を返します.

パラメータ

rset (Iterable[DType | Key]) -- Set や set でなくても構いません.

戻り値の型

Set

サンプル

>>> I = Set(value=[1,2], name='I')
>>> I * I
Set(name='(I*I)', dim=2, value=[(1, 1), (1, 2), (2, 1), (2, 2)])
>>> I * {3,4}
Set(name='(I*{3, 4})', dim=2, value=[(1, 3), (1, 4), (2, 3), (2, 4)])
>>> I * [3,4]
Set(name='(I*[3, 4])', dim=2, value=[(1, 3), (1, 4), (2, 3), (2, 4)])
>>> I * I * I
Set(name='((I*I)*I)', dim=3, value=[(1, 1, 1), (1, 1, 2), (1, 2, 1), (1, 2, 2), (2, 1, 1), (2, 1, 2), (2, 2, 1), (2, 2, 2)])
Set.__rsub__(lset: Iterable) Set

lset に含まれて Set に含まれない集合を返します.

パラメータ

lset (Iterable[DType | Key]) -- Set や set でなくても構いません.

戻り値の型

Set

サンプル

>>> I = Set(value=[1,2,3,4], name='I')
>>> {2,4,6,8} - I
Set(name='({8, 2, 4, 6}-I)', value=[8, 6])
>>> [2,4,6,8] - I
Set(name='([2, 4, 6, 8]-I)', value=[6, 8])
Set.__rmul__(lset: Iterable[DType | Key]) Set

lset と Set の直積集合を返します.

パラメータ

lset (Iterable[DType | Key]) -- Set や set でなくても構いません.

戻り値の型

Set

サンプル

>>> I = Set(value=[1,2], name='I')
>>> {3,4} * I
Set(name='({3, 4}*I)', dim=2, value=[(3, 1), (3, 2), (4, 1), (4, 2)])
>>> [3,4] * I
Set(name='([3, 4]*I)', dim=2, value=[(3, 1), (3, 2), (4, 1), (4, 2)])
pysimple.__add__(obj1: ObjExp, obj2: ObjExp) Parameter | Expression

二項演算 obj1+obj2 を返します.

パラメータ
戻り値

obj1 または obj2 が Variable, Expression の場合は Expression を, それ以外の場合は Parameter を返します.

戻り値の型

Parameter or Expression

pysimple.__sub__(obj1: ObjExp, obj2: ObjExp) Parameter | Expression

二項演算 obj1-obj2 を返します.

パラメータ
戻り値

obj1 または obj2 が Variable, Expression の場合は Expression を, それ以外の場合は Parameter を返します.

戻り値の型

Parameter or Expression

pysimple.__mul__(obj1: ObjExp, obj2: ObjExp) Parameter | Expression

二項演算 obj1*obj2 を返します.

パラメータ
戻り値

obj1 または obj2 が Variable, Expression の場合は Expression を, それ以外の場合は Parameter を返します. 演算結果が線形または二次でない場合,TypeError が投げられます.

戻り値の型

Parameter or Expression

例外

TypeError -- high dimension operand type(s) for *: {} and {}

pysimple.__mod__(obj1: ObjPrm, obj2: ObjPrm) Parameter

二項演算 obj1%obj2 を返します.

パラメータ
戻り値

演算結果が線形または二次でない場合,TypeError が投げられます.

戻り値の型

Parameter

例外

TypeError -- high dimension operand type(s) for %: {} and {}

pysimple.__truediv__(obj1: ObjExp, obj2: ObjPrm) Parameter | Expression

二項演算 obj1/obj2 を返します.

パラメータ
戻り値

obj1 が Variable, Expression の場合は Expression を, それ以外の場合は Parameter を返します. 演算結果が線形または二次でない場合,TypeError が投げられます.

戻り値の型

Parameter or Expression

例外

TypeError -- high dimension operand type(s) for /: {} and {}

pysimple.__floordiv__(obj1: ObjPrm, obj2: ObjPrm) Parameter

二項演算 obj1//obj2 を返します.

パラメータ
戻り値

演算結果が線形または二次でない場合,TypeError が投げられます.

戻り値の型

Parameter

例外

TypeError -- high dimension operand type(s) for //: {} and {}

pysimple.__pow__(obj1: ObjPrm, obj2: ObjPrm) Parameter

二項演算 obj1**obj2 を返します.

パラメータ
戻り値

演算結果が線形または二次でない場合,TypeError が投げられます.

戻り値の型

Parameter

例外

TypeError -- high dimension operand type(s) for **: {} and {}

pysimple.__radd__(obj1: ObjExp, obj2: DType) Parameter | Expression
pysimple.__rsub__(obj1: ObjExp, obj2: DType) Parameter | Expression
pysimple.__rmul__(obj1: ObjExp, obj2: DType) Parameter | Expression
pysimple.__rmod__(obj1: ObjPrm, obj2: DType) Parameter
pysimple.__rdiv__(obj1: ObjPrm, obj2: DType) Parameter
pysimple.__rtruediv__(obj1: ObjPrm, obj2: DType) Parameter
pysimple.__rfloordiv__(obj1: ObjPrm, obj2: DType) Parameter
pysimple.__rpow__(obj1: ObjPrm, obj2: DType) Parameter

同様に定義されています.

5.4.3. 比較演算

pysimple.__lt__(obj1: Iterable | ObjPrm, obj2: Iterable | ObjPrm) bool | Cond

比較演算 obj1<obj2 を返します. obj1, obj2 が共に collections.abc.Set の派生クラスの場合は集合の包含関係を, obj1, obj2 が共に ObjPrm の場合は不等式を満たす要素からなる条件文を, それ以外で ObjPrm と Iterable の比較は以下のような条件文を返します.

ObjPrm<Iterable の場合,set(ObjPrm) & set(Iterable), Iterable<ObjPrm の場合,set(ObjPrm) - set(Iterable) からなる条件文を返します.

パラメータ
戻り値

obj1, obj2 が共に collections.abc.Set の派生クラスの場合は bool, それ以外の場合は Cond を返します. ただし,両辺とも添字を含まない場合は bool を返します.

戻り値の型

bool or Cond

サンプル

>>> I = Set(value=[1,2,3,4], name='I')
>>> II = Set(value=[1,2,3,4,5], name='II')
>>> I < I
False
>>> I < II
True
>>> I < {1,2,3,4}
False
>>> i = Element(set=I, name='i')
>>> i < 3
(i<3)[i] in [1, 2]
>>> a = Parameter(index=i, name='a')
>>> a[i] = 4 - i
>>> a
a[1]=3
a[2]=2
a[3]=1
a[4]=0
>>> i < a[i]
(i<a[i])[i] in [1]
>>> J = Set(value=[2,4,6,8], name='J')
>>> i < J  # i.set & J
(i<J)[i] in [2, 4]
>>> J < i  # i.set - J
(J<i)[i] in [1, 3]
>>> i < {2,4,6,8}
(i<{8, 2, 4, 6})[i] in [2, 4]
>>> i < [2,4,6,8]
(i<[2, 4, 6, 8])[i] in [2, 4]
pysimple.__gt__(obj1: Iterable | ObjPrm, obj2: Iterable | ObjPrm) bool | Cond

比較演算 obj1>obj2 を返します. obj1, obj2 が共に collections.abc.Set の派生クラスの場合は集合の包含関係を, obj1, obj2 が共に ObjPrm の場合は不等式を満たす要素からなる条件文を, それ以外で ObjPrm と Iterable の比較は以下のような条件文を返します.

ObjPrm>Iterable の場合,set(ObjPrm) - set(Iterable), Iterable>ObjPrm の場合,set(ObjPrm) & set(Iterable) からなる条件文を返します.

パラメータ
戻り値

obj1, obj2 が共に collections.abc.Set の派生クラスの場合は bool, それ以外の場合は Cond を返します. ただし,両辺とも添字を含まない場合は bool を返します.

戻り値の型

bool or Cond

サンプル

>>> I = Set(value=[1,2,3,4], name='I')
>>> II = Set(value=[1,2,3], name='II')
>>> I > I
False
>>> I > II
True
>>> I > {1,2,3,4}
False
>>> i = Element(set=I, name='i')
>>> i > 3
(i>3)[i] in [4]
>>> a = Parameter(index=i, name='a')
>>> a[i] = 4 - i
>>> a
a[1]=3
a[2]=2
a[3]=1
a[4]=0
>>> i > a[i]
(i>a[i])[i] in [3, 4]
>>> J = Set(value=[2,4,6,8], name='J')
>>> J > i  # i.set & J
(J>i)[i] in [2, 4]
>>> i > J  # i.set - J
(i>J)[i] in [1, 3]
>>> i > {2,4,6,8}
(i>{8, 2, 4, 6})[i] in [1, 3]
>>> i > [2,4,6,8]
(i>[2, 4, 6, 8])[i] in [1, 3]
pysimple.__le__(obj1: Iterable | ObjExp, obj2: Iterable | ObjExp) bool | Cond | Constraint

比較演算 obj1<=obj2 を返します. obj1, obj2 が共に collections.abc.Set の派生クラスの場合は集合の包含関係を, obj1, obj2 が共に ObjPrm の場合は不等式を満たす要素からなる条件文を, obj1, obj2 に Variable, Expression を含む場合は制約式を返します.

パラメータ
戻り値

obj1, obj2 が共に collections.abc.Set の派生クラスの場合は bool, obj1, obj2 が共に ObjPrm の場合は Cond を, obj1, obj2 に Variable, Expression を含む場合は Expression を返します. ただし,obj1, obj2 が共に ObjPrm でいずれも添字含まない場合は bool を返します.

戻り値の型

bool or Cond or Constraint

サンプル

>>> I = Set(value=[1,2,3,4], name='I')
>>> II = Set(value=[1,2,3], name='II')
>>> I <= I
True
>>> I <= II
False
>>> I <= {1,2,3,4}
True
>>> i = Element(set=I, name='i')
>>> i <= 3
(i<=3)[i] in [1, 2, 3]
>>> a = Parameter(index=i, name='a')
>>> a[i] = 4 - i
>>> a
a[1]=3
a[2]=2
a[3]=1
a[4]=0
>>> i <= a[i]
(i<=a[i])[i] in [1, 2]
>>> x = Variable(index=i, name='x')
>>> a[i] <= x[i]
(a[i]<=x[i]):
x[1]>=3
x[2]>=2
x[3]>=1
x[4]>=0
pysimple.__ge__(obj1: Iterable | ObjExp, obj2: Iterable | ObjExp) bool | Cond | Constraint

比較演算 obj1>=obj2 を返します. obj1, obj2 が共に collections.abc.Set の派生クラスの場合は集合の包含関係を, obj1, obj2 が共に ObjPrm の場合は不等式を満たす要素からなる条件文を, obj1, obj2 に Variable, Expression を含む場合は制約式を返します.

パラメータ
戻り値

obj1, obj2 が共に collections.abc.Set の派生クラスの場合は bool, obj1, obj2 が共に ObjPrm の場合は Cond を, obj1, obj2 に Variable, Expression を含む場合は Expression を返します. ただし,obj1, obj2 が共に ObjPrm でいずれも添字含まない場合は bool を返します.

戻り値の型

bool or Cond or Constraint

サンプル

>>> I = Set(value=[1,2,3,4], name='I')
>>> II = Set(value=[1,2,3,4,5], name='II')
>>> I >= I
True
>>> I >= II
False
>>> I >= {1,2,3,4}
True
>>> i = Element(set=I, name='i')
>>> i >= 3
(i>=3)[i] in [3, 4]
>>> a = Parameter(index=i, name='a')
>>> a[i] = 4 - i
>>> a
a[1]=3
a[2]=2
a[3]=1
a[4]=0
>>> i >= a[i]
(i>=a[i])[i] in [2, 3, 4]
>>> x = Variable(index=i, name='x')
>>> a[i] >= x[i]
(a[i]>=x[i]):
-x[1]>=-3
-x[2]>=-2
-x[3]>=-1
-x[4]>=0
pysimple.__eq__(obj1: Iterable | ObjExp, obj2: Iterable | ObjExp) bool | Cond | Constraint

比較演算 obj1==obj2 を返します. obj1, obj2 が共に collections.abc.Set の派生クラスの場合は集合の包含関係を, obj1, obj2 が共に ObjPrm の場合は等式を満たす要素からなる条件文を, obj1, obj2 に Variable, Expression を含む場合は制約式を返します.

パラメータ
戻り値

obj1, obj2 が共に collections.abc.Set の派生クラスの場合は bool, obj1, obj2 が共に ObjPrm の場合は Cond を, obj1, obj2 に Variable, Expression を含む場合は Expression を返します. ただし,obj1, obj2 が共に ObjPrm でいずれも添字含まない場合は bool を返します.

戻り値の型

bool or Cond or Constraint

サンプル

>>> I = Set(value=[1,2,3,4], name='I')
>>> II = Set(value=[1,2,3], name='II')
>>> I == I
True
>>> I == II
False
>>> I == {1,2,3,4}
True
>>> i = Element(set=I, name='i')
>>> i == 3
(i==3)[i] in [3]
>>> a = Parameter(index=i, name='a')
>>> a[i] = 4 - i
>>> a
a[1]=3
a[2]=2
a[3]=1
a[4]=0
>>> i == a[i]
(i==a[i])[i] in [2]
>>> x = Variable(index=i, name='x')
>>> a[i] == x[i]
(a[i]==x[i]):
-x[1]==-3
-x[2]==-2
-x[3]==-1
-x[4]==0
pysimple.__ne__(obj1: collections.abc.Set | ObjPrm, obj2: collections.abc.Set | ObjPrm) bool | Cond

比較演算 obj1!=obj2 を返します. obj1, obj2 が共に collections.abc.Set の派生クラスの場合は集合の包含関係を, obj1, obj2 が共に ObjPrm の場合は不等式を満たす要素からなる条件文を返します.

パラメータ
戻り値

obj1, obj2 が共に collections.abc.Set の派生クラスの場合は bool, obj1, obj2 が共に ObjPrm の場合は Cond を返します. ただし,両辺とも添字を含まない場合は bool を返します.

戻り値の型

bool or Cond

サンプル

>>> I = Set(value=[1,2,3,4], name='I')
>>> II = Set(value=[1,2,3], name='II')
>>> I != I
False
>>> I != II
True
>>> I != {1,2,3,4}
False
>>> i = Element(set=I, name='i')
>>> i != 3
(i!=3)[i] in [1, 2, 4]
>>> a = Parameter(index=i, name='a')
>>> a[i] = 4 - i
>>> a
a[1]=3
a[2]=2
a[3]=1
a[4]=0
>>> i != a[i]
(i!=a[i])[i] in [1, 3, 4]

5.4.4. ビット演算

Set.__or__(rset: Iterable[DType | Key]) Set

Set と rset のいずれかに含まれる集合を返します.

パラメータ

rset (Iterable[DType | Key]) -- Set や set でなくても構いません.

戻り値の型

Set

サンプル

>>> I = Set(value=[1,2,3,4], name='I')
>>> J = Set(value=[2,4,6,8], name='J')
>>> I | J
Set(name='(I|J)', value=[1, 2, 3, 4, 6, 8])
>>> I | {2,4,6,8}
Set(name='(I|{8, 2, 4, 6})', value=[1, 2, 3, 4, 8, 6])
>>> I | [2,4,6,8]
Set(name='(I|[2, 4, 6, 8])', value=[1, 2, 3, 4, 6, 8])
Set.__and__(rset: Iterable[DType | Key]) Set

Set と rset の両方に含まれる集合を返します.

パラメータ

rset (Iterable[DType | Key]) -- Set や set でなくても構いません.

戻り値の型

Set

サンプル

>>> I = Set(value=[1,2,3,4], name='I')
>>> J = Set(value=[2,4,6,8], name='J')
>>> I & J
Set(name='(I&J)', value=[2, 4])
>>> I & {2,4,6,8}
Set(name='(I&{8, 2, 4, 6})', value=[2, 4])
>>> I & [2,4,6,8]
Set(name='(I&[2, 4, 6, 8])', value=[2, 4])
Set.__xor__(rset: Iterable[DType | Key]) Set

Set と rset のいずれか一方にだけ含まれる集合を返します.

パラメータ

rset (Iterable[DType | Key]) -- Set や set でなくても構いません.

戻り値の型

Set

サンプル

>>> I = Set(value=[1,2,3,4], name='I')
>>> J = Set(value=[2,4,6,8], name='J')
>>> I ^ J
Set(name='(I^J)', value=[1, 3, 6, 8])
>>> I ^ {2,4,6,8}
Set(name='(I^{8, 2, 4, 6})', value=[1, 3, 8, 6])
>>> I ^ [2,4,6,8]
Set(name='(I^[2, 4, 6, 8])', value=[1, 3, 6, 8])
Set.__ror__(lset: Iterable[DType | Key]) Set

lset と Set のいずれかに含まれる集合を返します.

パラメータ

lset (Iterable[DType | Key]) -- Set や set でなくても構いません.

戻り値の型

Set

サンプル

>>> I = Set(value=[1,2,3,4], name='I')
>>> {2,4,6,8} | I
Set(name='({8, 2, 4, 6}|I)', value=[1, 2, 3, 4, 8, 6])
>>> [2,4,6,8] | I
Set(name='([2, 4, 6, 8]|I)', value=[1, 2, 3, 4, 6, 8])
Set.__rand__(lset: Iterable[DType | Key]) Set

lset と Set の両方に含まれる集合を返します.

パラメータ

lset (Iterable[DType | Key]) -- Set や set でなくても構いません.

戻り値の型

Set

サンプル

>>> I = Set(value=[1,2,3,4], name='I')
>>> {2,4,6,8} & I
Set(name='({8, 2, 4, 6}&I)', value=[2, 4])
>>> [2,4,6,8] & I
Set(name='([2, 4, 6, 8]&I)', value=[2, 4])
Set.__rxor__(lset: Iterable[DType | Key]) Set

lset と Set のいずれか一方にだけ含まれる集合を返します.

パラメータ

lset (Iterable[DType | Key]) -- Set や set でなくても構いません.

戻り値の型

Set

サンプル

>>> I = Set(value=[1,2,3,4], name='I')
>>> {2,4,6,8} ^ I
Set(name='({8, 2, 4, 6}^I)', value=[1, 3, 8, 6])
>>> [2,4,6,8] ^ I
Set(name='([2, 4, 6, 8]^I)', value=[1, 3, 6, 8])
Cond.__or__(rcond: Cond) Cond

Cond と rcond のいずれかの条件を満たす条件式を返します.

パラメータ

rcond (Cond) --

戻り値の型

Cond

サンプル

>>> i = Element(value=[1,2,3], name='i')
>>> (i<2) | (2<i)
((i<2)|(i>2))[i] in [1, 3]

注釈

Cond.__and__(rcond: Cond) Cond

Cond と rcond の両方の条件を満たす条件式を返します.

パラメータ

rcond (Cond) --

戻り値の型

Cond

サンプル

>>> i = Element(value=[1,2,3], name='i')
>>> (1<i) & (i<3)
((i>1)&(i<3))[i] in [2]

注釈

  • 演算子の優先順位 」 により,各条件には括弧をつける必要があります.

  • 3 つ以上の条件文の場合,Condition 関数を使用した方が効率的で見やすいです. Condition(i, (1<i, i<5, i!=3))