学习最优化理论算法时用到了《优化设计》和《最优理论与方法》两本书。

根据的《优化设计》第55页的流程图,实现了流程图前半部分的代码设计(尚未添加Powell判断条件),给自己也给正在学习的朋友们留下学习笔记。

代码如下:

import numpy as np

from sympy import symbols,solve,diff

import time

e = 0.01  #精度

n = int(input('请输入n的值:'))

count = 0 # 迭代次数计数器

maxtimes = int(input('请输入最大迭代次数:'))  # 最大迭代次数

time_s = time.time()

# 定义初始点

X0 = []

for i in range(1,n+3):

if i % 3 == 0:

X0.append(0.5)

elif i % 3 == 1:

X0.append(0.5)

elif i % 3 == 2:

X0.append(1)

# 初始方向

d = np.identity(n+2,dtype = int)

# 定义目标函数

def objfun(n,x):

f = 0

for i in range(1,n+1):

item = (-x[i-1] + x[i] + x[i+1])**2 + (x[i-1] - x[i] + x[i+1])**2 + (x[i-1] + x[i] - x[i+1])**2

f += item

return f

# 定义步长符号

alpha = symbols('alpha')

# 循环开始

while count < maxtimes:

count = count + 1

x = [X0]

F = [objfun(n,X0)]

delta_list = []

# 定义迭代公式

def X(i,alpha):

if i <= 1:

return list(np.array(X0)+alpha*d[:,i-1])

else:

return list(np.array(x[i-1]) + alpha*d[:,i-1])

# 求X1,X2,...,X(n+2)

for i in range(1,n+3):

res = objfun(n,X(i,alpha))

b = solve(diff(res,alpha))  # 写入需要解的方程体

a1 = complex(b[0]).real  # 取出复数的实部

a1 = round(a1,4)

x.append(X(i,a1))

F.append(objfun(n,x[i]))

delta = abs(F[i]-F[i-1])

# 取沿搜索方向增量的最大者

delta_list.append(delta)

d_delta = max(delta_list)

m = delta_list.index(d_delta)

if abs((F[n+2]-F[n-1])/F[n+2]) <= e:

X_bestpoint = x[n+2]

F_bestpoint = F[n+2]

print('-------经过{}次迭代后,求得最优-------'.format(count))

print('迭代时间为:{}秒'.format(time.time()-time_s))

print('最优解为:',X_bestpoint)

print('最优函数值为:',F_bestpoint)

break

else:

d_n = np.array(x[n+2])-np.array(x[0])

d = np.delete(d,m,1)

d = np.column_stack((d,d_n))

X0 = x[-1]

【学习笔记】powell法的python实现相关推荐

  1. 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-03-基于Python的LeNet之LR

    原地址可以查看更多信息 本文主要参考于:Classifying MNIST digits using Logistic Regression  python源代码(GitHub下载 CSDN免费下载) ...

  2. 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-04-基于Python的LeNet之MLP

    原文地址可以查看更多信息 本文主要参考于:Multilayer Perceptron  python源代码(github下载 CSDN免费下载) 本文主要介绍含有单隐层的MLP的建模及实现.建议在阅读 ...

  3. 学习笔记1:更改python下载源

    学习笔记1:更改python下载源,让安装速度更快! 1.常用的国内镜像源 清华镜像源 https://pypi.tuna.tsinghua.edu.cn/simple 中科大镜像源 https:// ...

  4. ROS学习笔记(二)——python、C++编译器以及ROS的安装

    ROS学习笔记(二)--python.C++编译器以及ROS的安装 文章目录 ROS学习笔记(二)--python.C++编译器以及ROS的安装 一.编译器的安装 二.ROS的安装 三.验证: 本文主 ...

  5. Polyworks脚本开发学习笔记(十五)-用Python连接Polyworks的COM组件

    Polyworks脚本开发学习笔记(十五)-用Python连接Polyworks的COM组件 用Polyworks脚本开发,没有高级语言的支持,功能难免单一,一些比较复杂的交互实现不了,界面和报告也很 ...

  6. python学习笔记(一)Python 简单介绍

    Python学习笔记(一)Python 简单介绍 Python介绍 Python简介 Python应用领域 Python是解释型的语⾔ 编译和解释的区别是什么? 编译型vs解释型 编译型 解释型 Py ...

  7. Python学习笔记(二)——Python基本图形绘制

    Python学习笔记(二)--Python基本图形绘制 文章目录 Python学习笔记(二)--Python基本图形绘制 不同编程语言的初心和适用对象 Python蟒蛇绘制 五星红旗绘制 这次笔记主要 ...

  8. 《数据结构、算法与应用 —— C++语言描述》学习笔记 — 回溯法

    <数据结构.算法与应用 -- C++语言描述>学习笔记 - 回溯法 一.算法思想 二.货箱装载 1.问题描述 2.回溯算法 3.实现 4.测试代码 一.算法思想 回溯法是搜索问题解的一种系 ...

  9. 影像组学视频学习笔记(31)-柱状图的python实现、Li‘s have a solution and plan.

    本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(31)主要介绍: 用python画柱状图,带errorbar,以及分组展示 import seaborn as sns import p ...

  10. 探索初级算法学习笔记-快速排序法

    快速排序法学习笔记 #include<stdio.h>void swap(int *a,int *b) {int t;t=*a;*a=*b;*b=t; }void quickSort(in ...

最新文章

  1. std thread
  2. python中用来占位_python 占位符
  3. Android电视关闭的闪屏动画效果
  4. Win2003中apache2整合tomcat5和iis6
  5. python 指针指向的内容,python-文件的读取及指针位置
  6. 如何导出久其报表所有数据_如何选择好的HR软件
  7. swiper链接href无效
  8. csp2020 j2民间数据下载_摊开母婴市场数据集看一看
  9. 详解 equals() 方法和 hashCode() 方法
  10. linux python安装pip_linux安装pip2.7
  11. Web大学生网页作业成品~美食餐饮网站设计与实现(HTML+CSS+JavaScript)
  12. Jupyter Nbextensions插件功能大全
  13. vue如何关闭eslint语法检查
  14. 全天下最经典的句子,2013重现!
  15. v$active_session_history的wait_time和time_waited 列(转)
  16. Android开发如何进阶,薪资如何跟上年龄的脚步?,深度解读Netty
  17. Mac 重置 idea
  18. 智能手环---MQTT协议简介及协议原理
  19. 知识管理文档协同不一定要用语雀和石墨,用它效果更好
  20. Python学习(六)——格式化输出

热门文章

  1. 思特威电子通过注册:拟募资28亿 小米红杉联想是股东
  2. Matlab 均值滤波与中值滤波
  3. 幅频特性曲线protues_第4章 proteus 模拟电路实验与综合设计
  4. 翁恺c语言程序设计入门作业,程序设计入门——C语言
  5. DWM1000模块简介
  6. ae效果英文版翻译对照表_AE特效菜单中英文对照
  7. 算法导论答案 16.2-4
  8. 【自考】-计算机网络原理
  9. 实部和虚部高斯变量瑞利衰落matlab,瑞利信道仿真
  10. javaWeb+servlet+mysql实现简单的企业员工管理系统