V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
meiyiqing
V2EX  ›  Python

[新人求助] minimize 函数参数不优化

  •  
  •   meiyiqing · 2019-12-08 03:44:46 +08:00 · 2039 次点击
    这是一个创建于 1816 天前的主题,其中的信息可能已经有所发展或是发生改变。
    刚转行入门,无奈领我入门的 Post Dr. ,有些事情没谈好后表示让我自己 solve 想完成一个将目标函数最小化的问题,可能不难但我就是找不到哪里不对,在此求助各位大神指点迷津。


    主要问题:使用 minimize 函数最后想要优化的参数 s 并没有任何变化,以下是部分代码:

    用到的 w1,w2,w3,w4,u1,u2,u3,u4 的定义公式均一致,由于篇幅限制省略
    # 目标函数
    def Psi1(s, rxt, ryt, rzt):
    return lambda1 * Gama_x(s,rxt) + lambda2 * Gama_y(s, ryt) + lambda3 * Gama_z(s, rzt)
    # 目标函数里面用到的函数
    def Gama_x(s, rxt):
    rxk = (wx1 / ux1 - wx2 / ux2 - ax - (wx1 / ux1) * (wx2 / ux2) * ax) / (one + (wx1 / ux1) * (wx2 /
    ux2)+(wx1 / ux1) * ax - (wx2 / ux2) * ax)
    return (alpha ** 2 * sigma_ms) / (2 * pi * mu0) * ((norm(rxk - rxt)) + norm(arctan(rxt)))

    def Gama_y(s, ryt):
    ryk = (wy1 / uy1 - wy2 / uy2 - ay - (wy1 / uy1) * (wy2 / uy2) * ay) / (one + (wy1 / uy1) * (wy2 /
    uy2) + (wy1 / uy1) * ay - (wy2 / uy2) * ay)
    return (abs(alpha * sqrt(1-alpha**2)) * sigma_ms) / (2 * pi * mu0) * ((norm(ryk - ryt)) +
    norm(arctan(ryt)))

    def Gama_z(s, rzt):
    rzk = az * ((wz3 * wz4) / (uz3 * uz4))
    return (abs(alpha) * sigma_ms) / (4 * pi * mu0) * norm(log(rzt))**2 + 2 * (log(rzt) / rzt) @ (rzk -
    rzt).T + L / 2 * (rzk - rzt) @ (rzk - rzt).T
    # 主要代码
    for i in range(K1):
    rxt, ryt,rzt 公式与 rxk,ryk,rzk 一致
    # 循环中执行 minimize 函数
    r = minimize(Psi1, s, method='Nelder-Mead', args=(rxt, ryt, rzt), bounds=bnds, c**traints=c**)
    # 约束
    c** = ({'type':'eq','fun': lambda s: yx - Phix @ fbx(s).T},
    {'type':'eq','fun': lambda s: yy - Phiy @ fby(s).T},
    {'type':'eq','fun': lambda s: yz - Phiz @ fbz(s).T},
    )
    bnds = ((0, None), (0, None))
    # 约束里用到的函数省略了
    主要的代码内容就是这些,因为字符有限不知道信息是否完整,非常非常欢迎各路大神指正!
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3370 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 11:42 · PVG 19:42 · LAX 03:42 · JFK 06:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.