A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from http://apmonitor.com/wiki/index.php/Apps/MpecExamples below:

Mpec Examples

MPEC: Mathematical Programs with Equilibrium Constraints

Mathematical Programs with Equilibrium Constraints (MPECs) are formulations that can be used to model certain classes of discrete events. MPECs can be more efficient than solving mixed integer formulations of the optimization problems because it avoids the combinatorial difficulties of searching for optimal discrete variables.

SIGN Operator !

MPEC formulation

for

SIGN function


!

y

=

SIGN

(

x

)

returns a value y

,

where:


!    1 if

the corresponding element of X

is

greater than zero


!

-

1 if

the corresponding element of X

is

less than zero

Model sign

Parameters

x

=

-

2

End Parameters

  Variables

y

>=

-

1, <= 1

    s_a >= 0

s_b

>= 0

End Variables

  Equations


    ! test

sign

operator,

y

=

sign

(

x

)

x

=

s_b - s_a

    minimize s_a*(1+y) + s_b*(1-y)

End Equations

End Model

!

SIGN function MPEC

as

an Object

Objects

f

=

sign

End Objects

Connections

f.

x =

x

f.

y =

y

End Connections

Parameters

x

=

-

2

End Parameters

Variables

y

End Variables

GEKKO SIGNUM function (sign2)

See GEKKO Documentation for additional examples.

from gekko import GEKKO
m = GEKKO()
x = m.Param(-2)
# use sign2 to define a new variable
y = m.sign2(x)
m.solve()  # solve
print('x: ' + str(x.value))
print('y: ' + str(y.value))

Absolute Value (ABS) Operator !

MPEC formulation

for

ABS function


!

y

=

ABS

(

x

)

returns a value y

,

where:


!

y

=

x

if

the corresponding element of X

is >

than zero


!

y

=

-x

if

the corresponding element of X

is <

than zero

Parameters

x

=

-

2

End Parameters

Variables

y

  s_a >= 0

s_b

>= 0

End Variables

Equations


  ! test abs operator,

y

= abs(

x

)

x

=

s_b - s_a

y

=

s_a + s_b

  minimize s_a*s_b

End Equations

!

ABS function MPEC

as

an Object

Objects

f

= abs

End Objects

Connections

f.

x =

x

f.

y =

y

End Connections

Parameters

x

=

-

2

End Parameters

Variables

y

End Variables

GEKKO ABS function (abs2)

See GEKKO Documentation for additional examples.

from gekko import GEKKO
m = GEKKO()
x = m.Param(-2)
# use abs2 to define a new variable
y = m.abs2(x)
# use abs2 in an equation
z = m.Var()
m.Equation(z==m.abs2(x)+1)
m.solve() # solve
print('x: ' + str(x.value))
print('y: ' + str(y.value))
print('z: ' + str(z.value))

Minimum Selector (MIN) Operator !

MPEC formulation

for

MIN function


!

y

=

MIN

(

x1

,

x2

)

returns a value y

,

where:


!

y

=

x1

if

x1

<

x2


!

y

=

x2

if

x2

<

x1

Model

Parameters

x1

=

-

2

x2

=

-

1

End Parameters

  Variables

y

    ! slack variables

s_a

>= 0

s_b

>= 0

End Variables

  Equations


    ! test min operator,

y

= min(

x1

,

x2

)

x2 - x1

=

s_b - s_a

y

=

x1 - s_a

    minimize s_a*s_b

End Equations

End Model

!

MIN function MPEC

as

an Object

Objects

f

= min

End Objects

Connections

f.

x[1] =

x1

f.

x[2] =

x2

f.

y =

y

End Connections

Parameters

x1

=

-

2

x2

=

-

1

End Parameters

Variables

y

End Variables

GEKKO MIN function (min2)

See GEKKO Documentation for additional examples.

from gekko import GEKKO
m = GEKKO()
x1 = m.Param(-2)
x2 = m.Param(-1)
# use min2
y = m.min2(x1,x2)
m.solve() # solve
print('x1: ' + str(x1.value))
print('x2: ' + str(x2.value))
print('y: '  + str(y.value))

Maximum Selector (MAX) Operator !

MPEC formulation

for

MAX function


!

y

=

MAX

(

x1

,

x2

)

returns a value y

,

where:


!

y

=

x1

if

x1

>

x2


!

y

=

x2

if

x2

>

x1

Model

Parameters

x1

=

-

2

x2

= 4

End Parameters

  Variables

y

    ! slack variables

s_a

>= 0

s_b

>= 0

End Variables

  Equations


    ! test max operator,

y

= max(

x1

,

x2

)

x2 - x1

=

s_a - s_b

y

=

x1 + s_a

    minimize s_a*s_b

End Equations

End Model

!

MAX function MPEC

as

an Object

Objects

f

= max

End Objects

Connections

f.

x[1] =

x1

f.

x[2] =

x2

f.

y =

y

End Connections

Parameters

x1

=

-

2

x2

=  4

End Parameters

Variables

y

End Variables

GEKKO MAX function (min2)

See GEKKO Documentation for additional examples.

from gekko import GEKKO
m = GEKKO()
x1 = m.Param(-2)
x2 = m.Param(-1)
# use max2
y = m.max2(x1,x2)
m.solve() # solve
print('x1: ' + str(x1.value))
print('x2: ' + str(x2.value))
print('y: '  + str(y.value))

Reference

Mojica, J.L., Petersen, D.J., Hansen, B., Powell, K.M., Hedengren, J.D., Optimal Combined Long-Term Facility Design and Short-Term Operational Strategy for CHP Capacity Investments, Energy, Vol 118, 1 January 2017, pp. 97–115. Article


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4