- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所以我的约束函数没有被正确地施加,它会出现。
import numpy as np
import scipy.integrate as integrate
import scipy.interpolate as interpolate
import pylab as plt
import scipy.optimize as op
import math
def make_cons(parameter_guess):
cons=()
for i in range(0,len(parameter_guess)):
constraint = {'type': 'ineq', 'fun': lambda parameter_guess: -math.fabs(parameter_guess[i]) + 1 }
cons +=(constraint,)
# print cons
#cons=({'type': 'ineq', 'fun': lambda parameter_guess: -parameter_guess+ 1 })
return cons
def problem(N,IC):
t=np.linspace(0,5,1000)
tt=np.linspace(0,5+.5,N+1)
parameter_guess = .5*np.ones(len(tt))
res=op.minimize(cost_function, parameter_guess, args=(t,tt,IC), method='SLSQP',constraints=make_cons(parameter_guess))
true_param= res.x
print res.message
print true_param
generate_state_and_control(true_param,t,tt,IC)
def cost_function(parameter_guess,t,tt,IC):
#print parameter_guess
f_p = interpolate.interp1d(tt, parameter_guess)
sol = integrate.odeint(f, [IC[0],IC[1],0], t, args=(f_p,))
cost_sol = sol[:,2]
cost=cost_sol[-1]
print 'cost ' + str(cost)
return cost
def f(y,t,f_p):
dydt=[-y[0] +2*y[1] , y[0] -.2*y[1] + f_p(t), .5*(y[0]**2 + 2*y[1]**2 + 3*f_p(t)**2)]
return dydt
def generate_state_and_control(parameters,t,tt,IC):
f_p = interpolate.interp1d(tt, parameters)
sol = integrate.odeint(f, [IC[0],IC[1],0], t, args=(f_p,))
control=f_p(t)
position=sol[:,0]
velocity=sol[:,1]
cost_sol = sol[:,2]
cost=cost_sol[-1]
print 'cost ' + str(cost)
print parameters
plt.plot(tt,parameters,label='Control')
plt.xlabel('time')
plt.ylabel('u')
plt.title('Control')
plt.show()
plt.clf()
plt.plot(position,velocity,label='Velocity vs Position')
plt.xlabel('Position')
plt.ylabel('Velocity')
plt.title('Velocity vs Position')
plt.show()
problem(15,[3,6])
我在 make_cons 函数中进行约束。我只是说每个变量的绝对值都必须小于 1(即 |p_i| <=1 - 函数期望具有某种形式的 g(p_i)>=1 )
但是如果我跑。
problem(15,[3,6])
[ -6.91310983 -11.84886554 -8.39257891 -5.89026938 -3.94611243
-2.83438566 -1.84550722 -1.18591646 -0.72311117 -0.5668469
0.10564927 -0.02283327 -0.0312163 -0.08288569 0.34830762 0.5 ]
我们显然可以看到并非所有这些变量都在 -1 和 1 之间。
有人看到我在这里做的微不足道的错误吗?
最佳答案
不要在约束函数中使用绝对值函数。 SLSQP算法假设约束函数连续可微。
要获得与当前约束之一相同的效果,您可以创建两个约束函数,一个确保 x > -1,另一个确保 x < 1。
例如:
def make_cons(parameter_guess):
cons=()
for i in range(0,len(parameter_guess)):
constraint = {'type': 'ineq', 'fun': lambda x: 1 - x}
cons +=(constraint,)
constraint = {'type': 'ineq', 'fun': lambda x: 1 + x}
cons +=(constraint,)
return cons
或者您可以将约束表示为 1 - x**2 > 0
:
def make_cons(parameter_guess):
cons=()
for i in range(0,len(parameter_guess)):
constraint = {'type': 'ineq', 'fun': lambda x: 1 - x**2}
cons +=(constraint,)
return cons
那仍然不会给出好的结果。如果您缩放成本函数以返回相对较小的值,效果会更好。在从 cost_function()
返回之前简单地放置 cost/= 100000
会产生很大的不同。
通过这两项更改,我在运行结束时得到以下信息:
Optimization terminated successfully.
[ 0.31417892 0.21871057 0.28818131 0.40615797 0.26569214 0.74145029
-1.00000002 -0.9983564 -0.77176625 -0.10348714 -0.14786611 0.04025887
0.24103308 0.39788151 0.49343655 0.5 ]
cost 132978.180126
[ 0.31417892 0.21871057 0.28818131 0.40615797 0.26569214 0.74145029
-1.00000002 -0.9983564 -0.77176625 -0.10348714 -0.14786611 0.04025887
0.24103308 0.39788151 0.49343655 0.5 ]
由于您的约束是变量的简单常量边界,因此您可以使用 bounds
参数代替约束函数。例如,使用以下内容
res=op.minimize(cost_function, parameter_guess, args=(t,tt,IC),
method='SLSQP',
#constraints=make_cons(parameter_guess),
bounds=[(-1, 1)]*(N+1),
options={'ftol': 1e-10})
我得到了更好的结果:
Optimization terminated successfully.
[ 0.34405263 0.20874193 0.01236256 -0.88512666 0.90658335 0.65950279
-0.9576039 -0.99462141 -0.97049943 -0.99994613 -0.99998563 -0.99999957
-1. 0.09842358 0.47056459 0.5 ]
cost 125446.690335
[ 0.34405263 0.20874193 0.01236256 -0.88512666 0.90658335 0.65950279
-0.9576039 -0.99462141 -0.97049943 -0.99994613 -0.99998563 -0.99999957
-1. 0.09842358 0.47056459 0.5 ]
另一方面,与
res=op.minimize(cost_function, parameter_guess, args=(t,tt,IC),
method='SLSQP',
constraints=make_cons(parameter_guess),
#bounds=[(-1, 1)]*(N+1),
options={'ftol': 1e-10, 'maxiter': 1000})
结果更好:
Optimization terminated successfully.
[ 0.26307724 0.05991932 0.24965239 -0.99940001 -0.22487722 -0.99946811
-0.9997716 -0.99045829 -0.98981196 -0.9946721 -1. -0.99999917
-1. -0.99975764 0.27805723 0.5 ]
cost 116703.409203
[ 0.26307724 0.05991932 0.24965239 -0.99940001 -0.22487722 -0.99946811
-0.9997716 -0.99045829 -0.98981196 -0.9946721 -1. -0.99999917
-1. -0.99975764 0.27805723 0.5 ]
去图吧。
我建议多尝试一下这些选项。
关于python - scipy 优化最小化函数不强制约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42729927/
我有一个关于 DFA 最小化的问题。所以我使用了众所周知的技术将正则表达式转换为 NFA,然后使用 goto/closure 算法从中构造 DFA。现在的问题是如何将其最小化?我在这里看过有关它的课文
这是我的代码,当鼠标光标悬停在 TPanel 上时,它会“动画化”它。我还有一个代码块来取消它的动画。 procedure Tmain.pStarting1MouseEnter(Sender: TOb
我有图像 slider ,其中图像在超时时相互替换。我使用 jQuery 函数 setInterval() 但有一个小问题,在最小化浏览器窗口后,该函数继续“工作”,并且我恢复浏览器窗口图像的位置以令
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: How can I stop a double click of the window title bar
当我在我的 Windows 窗体应用程序中单击最小化按钮时,我不希望它执行经典的 Windows 最小化动画(窗口下降到任务栏)。 据我所知,没有最小化事件,我只能使用调整大小,但我不知道如何检测我是
首先 - 对不起我的英语。 我刚刚创建了 Android 应用程序。它包含几个 Activity ,并在此应用程序的背景下播放音乐。当用户以某种方式(通过单击“后退”按钮、主页按钮或其他方式)离开应用
我需要帮助编写一个程序,该程序以 (X,Y) 的形式给出指定数量的坐标点。将给出的点数是程序中的第一行;它可以通过扫描仪读取。 我需要计算覆盖线 x = a 和 y = b 的所有点的最小面积。因此,
我需要一个 Activity 返回到上一个 Activity ,但如果再次单击该按钮,它将恢复上次的 Activity 。这是所需的过程:我点击一个按钮, Activity 开始。如果我点击“后退”按
随着这个动画变得越来越复杂,我不断添加参数,以便它们在每次回调时可用。目前共有 6 个。 例如,现在我想在显示消息时禁用输入框,因此我必须添加另一个元素 - in_element; 电话: M
这是一个基于对话框的 MFC 应用程序。我并没有故意添加任何关于最小化、最大化和恢复按钮的代码。它可以首先显示那些按钮。但它在长时间运行后就会消失。或者计算机的 sleep 可能导致此问题? 我不知道
如何使用 Windows API 禁用窗口的最大化和/或最小化功能?最大化/最小化框需要变灰并禁用,双击标题栏、拖动到屏幕顶部等也需要不起作用。 最佳答案 您可以调用 SetWindowLong/Se
是否有任何已知的算法帽子可以解决以下问题:我们有一个 session ,有多个同时会谈。用户应标记感兴趣的会谈,然后我们要创建一个会谈时间表,以便我的大多数人都可以参加他们的会谈并最大限度地减少日程冲
目前我负责为一个小项目开发一个(C++)窗口类;目标是将依赖性保持在最低限度。Win32/WinAPI 的实现按预期工作,但是,当涉及到 Linux/XCB 时,我正在努力。 我知道,我可以检查“_N
windows C++编程,如何让事件窗口最大化或最小化? 对于鼠标按下事件,我们使用类似 mi.dwFlags = MOUSEEVENTF_LEFTDOWN 的东西,并使用 SendInput()
我编写了以下获取 2 个参数的构造函数,如果值(x 或 y)为负,它将被初始化为零。 public Point1 ( int x , int y ) { //if one or
我有以下代码,如果我将导航窗口最大化,它运行良好,但是当我最小化它时它停止工作。 更多细节: 当窗口最小化时,“scrollDown & scrollTop”函数停止执行。 'use strict'
我有一个包含一些宏和用户表单的 Excel 文件。 我不希望用户在没有密码的情况下访问文件本身。他们应该只能看到用户表单并通过用户表单输入数据。 这是我目前拥有的代码。 Private Sub Wor
目前,我正在尝试训练一个同时具有复值张量作为输入和输出的网络。作为损失函数,我采用输出与真实值之间逐点差异的范数。 当我尝试最小化损失函数时,tensorflow 的“最小化”函数提示意外的复数。我觉
这个函数是我想要优化的主力。任何关于如何限制其内存使用的想法都会很棒。 function F(len, rNo, n, ratio = 0.5) s = zeros(len); m = co
在 Qt 下的 Windows Mobile 和 Symbian 平台上,如何通过单击应用程序中的某个按钮来最小化我的应用程序? 最佳答案 大概QWidget::setWindowState将适合您,
我是一名优秀的程序员,十分优秀!