python - 在cvxpy中连接目标函数
问题描述
def calculate_eta_general(t1, t2):
''' This is calculating the eta for general case 1<t1<=t2<=time_slot'''
# sums all the bt from t1 to t2
agg_load_trace = cp.Variable(time_slot)
denominator = cp.Expression()
for i in range(t1, t2+1):
denominator += peak_estimation(agg_load_trace[0:i])
prob1 = cp.Problem(cp.Maximize((sum(agg_load_trace[t1-1:t2])-2*agg[0])/\
denominator),constraints= \
[lower_agg_prediction()<= agg_load_trace, \
agg_load_trace <= upper_agg_prediction()])
prob1.solve(solver=cp.SCS, max_iters = 100000)
value1 = (sum(agg_load_trace.value[t1-1:t2])-2*agg[0])/\
(sum(peak_estimation(agg_load_trace.value[i]) for i in range(t1, t2+1)))
prob2 = cp.Problem(cp.Maximize((sum(agg_load_trace[t1-1:t2])-(t2-t1+1)*agg[1])/\
(sum(peak_estimation(agg_load_trace[i]) for i in range(t1, t2+1)))),\
constraints= [lower_agg_prediction()<= agg_load_trace,
agg_load_trace <= upper_agg_prediction()])
prob2.solve(solver=cp.SCS, max_iters= 100000)
value2 = (sum(agg_load_trace.value[t1-1:t2])-(t2-t1+1)*agg[1])/\
(sum(peak_estimation(agg_load_trace.value[i]) for i in range(t1, t2+1)))
return cp.maximum(value1, value2)
理想情况下,我想写一个表达式为 sum(peak_estimation(agg_load_trace[0:i]) for i in range(t1, t2+1)))。但我不允许这样做。这就是为什么我做了以下
denominator = cp.Expression()
for i in range(t1, t2+1):
denominator += peak_estimation(agg_load_trace[0:i])
但是,我收到以下错误
File "C:\Users\Siyuan Xu\OneDrive - purdue.edu\research\coding\main.py", line 352, in <module>
print(calculate_eta_general(2,10))
File "C:\Users\Siyuan Xu\OneDrive - purdue.edu\research\coding\main.py", line 243, in calculate_eta_general
print("type is", type(peak_estimation(agg_load_trace[0])))
File "C:\Users\Siyuan Xu\OneDrive - purdue.edu\research\coding\main.py", line 228, in peak_estimation
prob = cp.Problem(cp.Minimize(offline_opt(np.array(Z_t.tolist() + \
AttributeError: 'index' object has no attribute 'tolist'
其中 peak_estimation 被定义为另一个优化结果
def peak_estimation(Z_t):
t = Z_t.size
remain_trace = cp.Variable(time_slot - t)
prob = cp.Problem(cp.Minimize(offline_opt(np.array(Z_t.tolist() + \
list(remain_trace)))), constraints = \
[lower_agg_prediction()[t:]<=remain_trace, \
remain_trace<= upper_agg_prediction()[t:]])
prob.solve(solver=cp.SCS, max_iters=50000)
return offline_opt(np.concatenate((Z_t,remain_trace.value)))
我的问题是如何编写一个表达式,将一堆函数与要优化的参数化变量相加。就像这里一样, agg_load_trace = cp.Variable(time_slot) 是要优化的变量数组
解决方案
推荐阅读
- python-2.7 - Python 2.7 拟合从多个方法返回错误值
- java - java.net.ConnectException: errno: 110 (连接超时)
- bash - BASH基于两列选择和计数不同
- cloud9-ide - Cloud9 中是否有 Eclipse 中的导入类快捷方式/功能?
- android - 在 Android Studio 的子项目实体中出现问题反应原生
- tfs - 由于身份无效的用户的搁置集,无法使用 TF 销毁命令
- mysql - 如何将数据从 Spark RDD 放入 Mysql 表
- python - 如何简化 SymPy 中的矩阵表达式?
- asp.net-identity - 无法使用 Identity Server 保护 webapi
- .htaccess - 显示不同的 url 并加载不同的页面 htaccess