线性决策规则和广义决策规则的python包
pyldr的Python项目详细描述
用法:用户需要向sim提供类algs和模拟器。ALGS应该继承自ALGS。在下面的例子中,我们将分段线性(algs)和sim-resolve-first(simulator)提供给sim。sim.update()将求解模型,sim.avg(n)返回模拟结果。
示例:
从SIM卡导入*
从sim_resolve_first import*
从分段线性导入*
case=sim_resolve_first()
algs=分段线性(
sim=sim(大小写,algs)
sim.update()
#sim.train_mab()
打印模拟平均值(1000)
ALG和模拟器的结构:
SIM卡:
模拟器的唯一要求是有一个sim()函数来返回一个实现。如果有任何参数,则应在set_para()中实现。例如sim_resolve_first.py和sim_alp.py。
警报:
您应该提供的接口包括lift_value()、relation()、strategy()和update()。此外,还应该在类中描述提升方法。
分段线性示例:
对于范围内的t(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])
对于范围内的t(self.t):
for j in range(self.J):
left = {}
for k in range(self.div_num):
left[self.xi[t,j,k]] = 1右={}
右[自身常数]=1
self.script.add_lin_eq(左,右)
对于范围内的k(self.div_num):
self.script.add_lin_greater({self.xi[t,j,k]:1},{self.constant:0})对于范围内的t(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_eq(左,右)
提升值(数据):
返回实现的提升值。
关系():
为项目设置依赖性self.p。例如,如果决策x(t,j)依赖于提升向量的前三个元素,那么self.p[t,j]={1,2,3}
策略(t,历史,x):
具有历史和优化决策变量x的阶段t的回报策略。
update():
更新提升方法。
分段线性py和三线性py是algs的例子。