scipy的约束优化:限制来自目标函数的约束值

时间:2017-09-29 15:53:09

标签: python optimization scipy

我正在尝试解决格式的约束优化问题:

min_ {x} f(x)

s.t。

x> = x_min

f(x)是x的非线性函数。

问题是x_min来自评估f(x),即:

<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
<body>
    <div class="container">
        <div class="navbar">
        </div>
        <div class="topContent">
        </div>
        <div class="mainContent">
        </div>
        <div class="leftSideNav1">
            <div class="leftSideNav1__lists">
                <!-- <i class="fa fa-home w3-large"></i> -->
                <i class="Tiny material-icons">home</i>
                <a href="#">Home</a>
                 <i class="material-icons">pause</i>
                <a href="#">YouTubers</a>
                <i class="material-icons">assignment</i>
                <a href="#">Campaigns</a>
                <i class="material-icons">message</i>
                <a href="#">Messages</a>
                <i class="material-icons">pause</i>
                <a href="#">Videos</a>
            </div>
        </div>
        <div class="leftSideNav2">
            <div class="leftSideNav2__lists">
                <ul class="leftSideNav2__list1">Videos
                    <li>Action Required</li>
                    <li>Fund YouTuber</li>
                    <li>Hired & Funded</li>
                    <li>Edit Requested</li>
                </ul>
                <ul class="leftSideNav2__list2">Proposals
                    <li>New</li>
                    <li>Declined</li>
                    <li>Changes Required</li>
                    <li>Changes Declined</li>
                </ul>
                <ul class="leftSideNav2__list3">Approvals
                    <li>Waiting for Approval</li>
                    <li>Approved / Completed</li>
                    <li>Video in Dispute</li>
                </ul>
            </div>
        </div>
    </div>
</body>

要解决这个问题,我想在def f(x): ... return cost_value, x_min 中使用SLSQP算法,因此我可以创建一个约束函数,例如:

scipy.optimize.minimize

然后将其传递给对优化器的调用:

def constraint(x):
    _, x_limit = f(x)
    value = x - x_limit
    return value

在我真正的问题中,评估from scipy.optimize import minimize constraints = ({'type': 'ineq', 'fun': constraint}) solution = minimize(fun=f, x0=x_seed, constraints=constraints) 是相当昂贵的(这是一个化学过程模拟,每次运行大约需要20-30秒),因此,f(x)f(x)来{得到constraint是不可取的。

我想知道是否存在一种递归方式来避免在x_lim函数中调用目标函数,并且仍然可以使用constraint的值来计算不等式。

0 个答案:

没有答案