【学习笔记】powell法的python实现
学习最优化理论算法时用到了《优化设计》和《最优理论与方法》两本书。
根据的《优化设计》第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实现相关推荐
- 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-03-基于Python的LeNet之LR
原地址可以查看更多信息 本文主要参考于:Classifying MNIST digits using Logistic Regression python源代码(GitHub下载 CSDN免费下载) ...
- 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-04-基于Python的LeNet之MLP
原文地址可以查看更多信息 本文主要参考于:Multilayer Perceptron python源代码(github下载 CSDN免费下载) 本文主要介绍含有单隐层的MLP的建模及实现.建议在阅读 ...
- 学习笔记1:更改python下载源
学习笔记1:更改python下载源,让安装速度更快! 1.常用的国内镜像源 清华镜像源 https://pypi.tuna.tsinghua.edu.cn/simple 中科大镜像源 https:// ...
- ROS学习笔记(二)——python、C++编译器以及ROS的安装
ROS学习笔记(二)--python.C++编译器以及ROS的安装 文章目录 ROS学习笔记(二)--python.C++编译器以及ROS的安装 一.编译器的安装 二.ROS的安装 三.验证: 本文主 ...
- Polyworks脚本开发学习笔记(十五)-用Python连接Polyworks的COM组件
Polyworks脚本开发学习笔记(十五)-用Python连接Polyworks的COM组件 用Polyworks脚本开发,没有高级语言的支持,功能难免单一,一些比较复杂的交互实现不了,界面和报告也很 ...
- python学习笔记(一)Python 简单介绍
Python学习笔记(一)Python 简单介绍 Python介绍 Python简介 Python应用领域 Python是解释型的语⾔ 编译和解释的区别是什么? 编译型vs解释型 编译型 解释型 Py ...
- Python学习笔记(二)——Python基本图形绘制
Python学习笔记(二)--Python基本图形绘制 文章目录 Python学习笔记(二)--Python基本图形绘制 不同编程语言的初心和适用对象 Python蟒蛇绘制 五星红旗绘制 这次笔记主要 ...
- 《数据结构、算法与应用 —— C++语言描述》学习笔记 — 回溯法
<数据结构.算法与应用 -- C++语言描述>学习笔记 - 回溯法 一.算法思想 二.货箱装载 1.问题描述 2.回溯算法 3.实现 4.测试代码 一.算法思想 回溯法是搜索问题解的一种系 ...
- 影像组学视频学习笔记(31)-柱状图的python实现、Li‘s have a solution and plan.
本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(31)主要介绍: 用python画柱状图,带errorbar,以及分组展示 import seaborn as sns import p ...
- 探索初级算法学习笔记-快速排序法
快速排序法学习笔记 #include<stdio.h>void swap(int *a,int *b) {int t;t=*a;*a=*b;*b=t; }void quickSort(in ...
最新文章
- std thread
- python中用来占位_python 占位符
- Android电视关闭的闪屏动画效果
- Win2003中apache2整合tomcat5和iis6
- python 指针指向的内容,python-文件的读取及指针位置
- 如何导出久其报表所有数据_如何选择好的HR软件
- swiper链接href无效
- csp2020 j2民间数据下载_摊开母婴市场数据集看一看
- 详解 equals() 方法和 hashCode() 方法
- linux python安装pip_linux安装pip2.7
- Web大学生网页作业成品~美食餐饮网站设计与实现(HTML+CSS+JavaScript)
- Jupyter Nbextensions插件功能大全
- vue如何关闭eslint语法检查
- 全天下最经典的句子,2013重现!
- v$active_session_history的wait_time和time_waited 列(转)
- Android开发如何进阶,薪资如何跟上年龄的脚步?,深度解读Netty
- Mac 重置 idea
- 智能手环---MQTT协议简介及协议原理
- 知识管理文档协同不一定要用语雀和石墨,用它效果更好
- Python学习(六)——格式化输出