semvec/pypi-packages huggingface dataset:
pyldr 0.1.2
Python Package for Linear Decision Rule and Generalized Decision Rule
License: MIT License

Usage: Users are required to provide classes Algs and Simulator to SIM. Algs should inherit from algs. In the following example, we provide piecewise_linear(Algs) and SIM_Resolve_First(Simulator) to SIM. SIM.update() will solve the model, while SIM.avg(n) return simulation results.

Example:

from SIM import *

from SIM_Resolve_First import *

from piecewise_linear import *

case = SIM_Resolve_First()

algs = piecewise_linear()

sim = SIM(case,algs)

sim.update()

#sim.train_mab()

print sim.avg(1000)


Structure of Algs and Simulator:

SIM:

The only requirement of Simulator is having a function sim() to return a realization. If there are any parameters, they should be implemented in set_para(). SIM_Resolve_First.py and SIM_ALP.py are examples.

Algs:

Interfaces you should provide include lift_value(),relation(),strategy() and update(). Also, lifting method should be described in the class.

Example of Piecewise Linear:

for t in range(self.T):

            for j in range(self.J):

                for k in range(self.div_num):

                    self.div_axis[t,j,k] = self.low_bound[t,j] + (self.up_bound[t,j]-self.low_bound[t,j])/float(self.div_num - 1) * k

                    self.xi[t,j,k] = self.script.add_var(0,self.div_axis[t,j,k])

        for t in range(self.T):

            for j in range(self.J):

                left = {}

                for k in range(self.div_num):

                    left[self.xi[t,j,k]] = 1

                right = {}

                right[self.constant] = 1

                self.script.add_lin_equ(left,right)

                for k in range(self.div_num):

                    self.script.add_lin_greater({self.xi[t,j,k]:1},{self.constant:0})

        for t in range(self.T):

            for j in range(self.J):

                left = {self.xi[t,j]:1}

                right = {}

                for k in range(self.div_num):

                    right[self.xi[t,j,k]] = self.div_axis[t,j,k]

                self.script.add_lin_equ(left,right)

lift_value(data):

return lift value for a realization.

relation():

set up dependence self.P for items. For example, if decision X(t,j) depends on first three elements of lifted vector, then self.P[t,j] = {1,2,3}

strategy(t,history,x):

return strategy at stage t with history and optimized decision variable x.

update():

update lifting methods.

piecewise_linear.py and tri_linear.py are examples of Algs.