具有一个变量的函数和的约束优化

时间:2019-08-13 08:14:33

标签: python optimization

我希望,我可以使我的问题尽可能清楚,这不是荒谬的。问题如下: 我需要最大化所有函数的变量必须具有相同值的函数结果的平均值(10,000)。但是,我对10,000个函数的单个结果有限制。

从我的角度来看,它应该很容易解决,但是由于我还不熟悉python中的优化,所以我真的不知道如何解决这个问题。

以下函数mean_revenue需要通过更改biddingvol进行优化,merged是具有10,000个半随机行的数组,其中包含Allocation的值,依此类推。

def mean_revenue(biddingvol,merged):
    #Rev_df is a df with the 10,000 rows
    Rev_df=pd.DataFrame({'Allocation':merged[:,0],'Price':merged[:,1],
    'Consume':merged[:,2],'Feed':merged[:,3]})

    Rev_df['Revenue']=calc_revenue(biddingvol,Rev_df.Allocation,Rev_df.Price,
    Rev_df.Consume,Rev_df.Feed)

    Mean_Rev=statistics.mean(Rev_df.Revenue)
    Max_Rev=max(Rev_df.Revenue)
    Min_Rev=min(Rev_df.Revenue)
    df_Revenue_sorted=np.sort(Rev_df.Revenue)
    VaR95=np.quantile(df_Revenue_sorted,0.05)
    return Mean_Rev,Max_Rev,Min_Rev,VaR95

calc_revenue计算每行的个人收入,这是一个线性函数,取决于带有一个可能不连续点的biddingvol。

通过使用while循环,我可以找到指定范围(0-14)内的不受限制的最大值。但是,我想确保风险值可能不会低于-1000。

    bid=1
    while True:
            bid1=list(mean_revenue(bid,random_array))
            bid0=list(mean_revenue(bid-1,random_array))

            if (bid1[0]<bid0[0]) or bid>14:
                overal.extend([bid0+[bid-1]])
                break
            bid=bid+1

将if行更改为if (bid1[0]<bid0[0] and bid1[3]<-1000) or bid>14:并不符合期望的结果,因为VaR仍低于-1000。

为此使用scipy.optimize中的方法是否明智?

谢谢!

0 个答案:

没有答案