python视频教程栏目介绍各种最优化算法

相关免费学习推荐:python视频教程

二分法

函数详见rres,此代码使该算法运行了两次def asdf(x):

rres=8*x**3-2*x**2-7*x+3

return rres

i=2

left=0

right=1

while i>0 :

i = i-1

ans = 0.1

mid1 = (left + right + ans) / 2

mid2 = (left + right - ans) / 2

a=asdf(mid1)

c=asdf(mid2)

if a > c :

right = mid1

else :

left = mid2

b=(left+right) / 2

print("左极限=%s,右极限=%s,极小值x=%s"%(left,right,b))左极限=0.45,右极限=0.775,极小值x=0.6125

收获:

这是我第一个实现的代码。学习完该算法以后,逻辑框架基本上就有了,剩下需要明确的就是对应的python的语言。于是我就开始了查找“如何定义函数”(详见mofan的优酷),“循环体”和“if条件语句”的格式(https://blog.csdn.net/qq_39407518/article/details/79822498)“数学符号”(详见mofan的优酷),以及print的使用

1.def是python中指定义,一般用来定义函数,如果需要深度学习搭建网络可用来定义网络。值得注意的一点是return必须要加在函数后面另起一行。

我不清楚为什么,但是如果没有加的话,那个函数公式就是一个花瓶,就像一个结果输不出去。

2.最坑的就是逻辑。一开始逻辑没理清楚,或者说在代码上有疏漏,导致我将left和right放在了循环体里,结果可想而知。不过也是因为这个错误,我知道pycharm中的debug怎么用,挺简单的,百度一下就出来了。

3.不知道什么原因,看的莫烦视频中的print多个变量一起输出是没有办法在我的pycharm中使用的,出来的结果很奇怪。可能是因为我是win10不是ios吧。print如果多个变量一起输出必须是print("名字:%s,名字2:%s"%(a,b))结果输出就是名字:a ,名字2:b

问题:1.为什么要加return?return的意思是输出这个def里面任意一个变量值作为结果显示。一般情况而言,是输出函数的关系式的命名,这样当你调用这个函数的时候,变量对应的函数值才能显示出来,否则只运行没有结果,不会有效果。

格点法——三点等分法import numpy as np

def qwer(x):

third = np.exp(x) - 5*x

return third

left = 1

right = 2

mid1 =float(left+right) / 2

mid2 = (left+mid1) / 2

mid3 = (mid1+right) /2

a = qwer(mid1)

b = qwer(mid2)

c = qwer(mid3)

i = 5

while i > 0:

i=i-1

if a > b:

if c > b :

#b

right = mid1

mid1 = mid2

a=b

mid2 = (left + mid1) / 2

mid3 = (mid1 + right) / 2

b = qwer(mid2)

c = qwer(mid3)

else:#b>c

#c

left = mid1

mid1 = mid3

a = c

mid2 = (left + mid1) / 2

mid3 = (mid1 + right) / 2

b = qwer(mid2)

c = qwer(mid3)

else:#b>a

if a > c:

#C

left = mid1

mid1 = mid3

a = c

mid2 = (left + mid1) / 2

mid3 = (mid1 + right) / 2

b = qwer(mid2)

c = qwer(mid3)

else:#b>a&c>a

# a

left = mid2

right = mid3

mid2 = (left + mid1) / 2

mid3 = (mid1 + right) / 2

b = qwer(mid2)

c = qwer(mid3)

print("最小值=%s"%mid1)

print("函数值=%s"%a)最小值=1.609375

函数值=-3.047189552275773

关于python中数据变量。第一遍运行结果出现很明显不对,于是我采用了debug。结果发现,mid1处一直为1而不是1.5,于是就开始了解数据变量。起初我猜测python默认所有变量为整型,但是根据二分法的结果我意识到此猜测不对,所以要改整个file的变量格式没有必要。所以我就在mid1式子前面加了一个float,结果就显示为1.5了。但是如果我将整个式子用()括起来,前面加float,结果还是1。我不太理解为什么。不过我知道了python的数据格式是根据输入量决定的,也就是说你的输入量如果是整型,那么与其直接相关的计算输出结果一定是整型,而且还是不采用进位的整型。在我没有采用+float/+.0这两种方法之前,mid1~3全部是整型。left = 1.0

right = 2.0

mid1 =(left+right) / 2

或者不再mid1前面加float,直接将输入量后面点个点就行

真的很想吐槽一下print,好麻烦啊啊啊啊每次都得弄个%s,而且有时候还不能放一起!!!!

Fibonacci法def fibonacci(n):

i=0

a = 0

b = 1

for i in range(n):

i=i+1

c = a+b

a = b

b = c

return c

def bn(x):

ert = x**2 - 6*x + 2

return ert

z = 2

p = 0

left = 0.00000

right = 10.00000

L1 = right - left

while z < 100:

m = fibonacci(z)

l = L1/m

k = 1.000/m

if k < 0.03:

print("n=%s,Fn=%s"%(z,m))

L2 = l*fibonacci(z-1)

t = left + L2

r = right -L2

while p < 3:

p = p + 1

l3 = t - r

e= bn(t)

o = bn(r)

if e>o :

right = t

t = r

r = left + l3

else:#o>e

left = r

r = t

t = right - l3

break

else:

z = z + 1

okk=(left+right)/2

okky=bn(okk)

print(left)

print(right)

print("极小值x=",okk)

print("极小值y=",okky)

不要问我掌握了什么,要问我现在写完这个代码后有多么的爱python的精度表示 :-)我决定以后只要再编写数学公式的代码都将输入量的小数学点后面补很多0

fibonacci函数定义,每次debug后我的手都是抖的O(∩_∩)O~

黄金分割法def gold(x):

gg= x**2 - 6*x + 9

return gg

left = 1

right = 7

ans = 0.4

a = left + 0.618 * (right - left)

b = left + 0.382*(right - left)

gga = gold(a)

ggb = gold(b)

i = 0

while i < 7:

print("i=%s" % i)

print("left=%s,right=%s" % (left, right))

print("x左=%s,x右=%s" % (a, b))

print("y左=%s,y右=%s" % (ggb, gga))

c = right - left

if c > 0.4:

i = i + 1

if gga > ggb:

right = a

a = b

b = left + 0.382*(right - left)

gga = ggb

ggb = gold(b)

else:#gga

left = b

b = a

a = left + 0.618 * (right - left)

ggb = gga

gga = gold(a)

else:

break

不知道自己什么时候有的强迫症,只要是代码下面有“~”我就必须要消掉。笑哭。这个很简单,前四个除了费波纳茨,都很简单。

间接法——二次插值法def yy(x):

y=x**4-4*x**3-6*x**2-16*x+4

return y

def xing(xm1,xm2,xm3,fm1,fm2,fm3):

yxxx=0.5000*((xm2**2-xm3**2)*fm1+(xm3**2-xm1**2)*fm2+(xm1**2-xm2**2)*fm3)/((xm2-xm3)*fm1+(xm3-xm1)*fm2+(xm1-xm2)*fm3)

return yxxx

x1 = -1.0000

f1 = yy(x1)

x3 = 6

f3 = yy(x3)

x2 = 0.50000*(x1+x3)

f2 = yy(x2)

xp = xing(x1,x2,x3,f1,f2,f3)

fp = yy(xp)

a = abs(xp-x2)

while abs(xp-x2) > 0.05000:

a = abs(xp - x2)

if xp > x2:

if fp > f2:

x3=xp

f3=fp

xp = xing(x1, x2, x3, f1, f2, f3)

fp = yy(xp)

print("ans=%s" % a)

print("left=%s,right=%s" % (x1, x3))

print("x*=%s,fp*=%s" % (xp, fp))

print("x2=%s,f2=%s" % (x2, f2))

print("******************")

else:#f2>fp

x1 = x2

f1 = f2

x2 = xp

f2 = fp

xp = xing(x1, x2, x3, f1, f2, f3)

fp = yy(xp)

print("ans=%s" % a)

print("left=%s,right=%s" % (x1, x3))

print("x*=%s,fp*=%s" % (xp, fp))

print("x2=%s,f2=%s" % (x2, f2))

print("******************")

else:#xp

if fp > f2:

x1 = xp

f1 = fp

xp = xing(x1, x2, x3, f1, f2, f3)

fp = yy(xp)

print("ans=%s" % a)

print("left=%s,right=%s" % (x1, x3))

print("x*=%s,fp*=%s" % (xp, fp))

print("x2=%s,f2=%s" % (x2, f2))

print("******************")

else:

x3 = x2

f3 = f2

x2 = xp

f2 = fp

xp = xing(x1, x2, x3, f1, f2, f3)

fp = yy(xp)

print("ans=%s" % a)

print("left=%s,right=%s" % (x1, x3))

print("x*=%s,fp*=%s" % (xp, fp))

print("x2=%s,f2=%s" % (x2, f2))

print("******************")

这个公式看起来很麻烦,便写的时候更要谨慎。我上回把那个2搁在了分号下面,结果很大,所以还是换算成0.5更好(PS:勿忘那长河般的0)。

虽然代码很长,但是主要是因为print太多。本打算在开头print,最后结果会漏掉最后一部分。懒得想其他办法了,直接就这样吧

间接法——牛顿法def fd(x):

y = 4*x**3-12*x**2-12*x-16

return y

def fdd(x):

ys = 12*x**2-24*x-12

return ys

i = 1

x0 = 3.00000

ans = 0.001

while i < 7:

fd0 = fd(x0)

fdd0 = fdd(x0)

if abs(fd0) > ans:

x1 = x0 - (fd0/fdd0)

x0 = x1

print("次数:%s,所得的值x:%s"%(i,x1))

i = i + 1

else:#fd0<0.001

print("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$")

print("Bingo!顺利通关!祝您开学愉快!")

print("Boss X=%s"%x0)

break

一开始while里面,导致run不出来。继而,debug也没法用。在网上一查才知道 “没联网”+“没选断点”。最后想尝试将else里面的内容输出来,结果发现run以后被刷屏了。于是改成i<7以后还是不行,于是想着加一个break跳出循环,结果成效了。

然后刚刚由debug了一下,才知道原来是i+1在if里面,因为没有办法+1,所以i=6一直存在,就不断循环。因为加break也好,i+1也好,都可以。

就在一个半小时前,我成功搞完了最优化六大代码,纯手打,无外力。开心!

这是我第一组自己实现的python代码,就是数学公式用python语言组装起来。刚开始的时候知道大概需要在语言中体现什么,但不太清楚。于是我就在网上找了几个二分法的,他们都各有不同,但框架都差不多,不过如果要用到我们的那个公式里还需要改变很多。然后我就开始分析我们的题,我发现大体需要两部分,一部分函数定义,一部分循环体。但我不知道如何定义函数,如何写数学公式,如何弄变量,也就是说一些小点不太会,所以我选择直接百度。因为我知道自己阅读的能力不错,相比于从视频中提取要素,我更擅长通过阅读获得要点。有目的性地找知识点,掌握地更牢固。

于是我就开始了第一个——二分法的编写。我发现,自己出现了很多错误而且有很多地方都很基础。但我依然没选择视频,而是将这些问题直接在百度上找,因为视频讲完或许你也没找到点。当然,这是一步一步走的,不是直接就将程序摆上去,一点一点改。

随着前两个的成功,我发现自己对于这些代码有了自信,似乎看透了他们的伪装,抓住了本质。除此之外,我还意识到自己自从8月份以后,学习能力似乎提高了不少,而且有了更为有效的学习方法。各方面都有了一定的觉醒。除了第一个找了几个牛头不对马嘴的代码,其他都是根据自己的逻辑写,逻辑通下来以后,对应语言中某一部分不知道如何翻译就去百度,其实这几个套路都一样或者说数学公式转化的套路都一样。

我还意识到,汇编其实是最难的语言,目前为止所学到的,因为很多都需要自己去定义,去死抠,需要记住大量的指令且不能灵活变通。但是其他的却只需要将一些对应的记下来就好。python真的挺简单的。而且,我发现自己今天似乎打开了新世界的大门,我爱上了这种充满了灵性的东西,充满了严谨的美丽,还有那未知的变化,我发现我似乎爱上了代码。可能不仅仅局限于python,这些语言都充满了挑战性。我觉得当你疑惑的时候,就需要相信直觉,至少我发现它很准

python实现五大基本算法语句_python实现各种最优化算法相关推荐

  1. python基本算法语句_Python中基本且又常用的算法

    这篇文章主要学习Python常用算法,Python常用排序算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algo ...

  2. 莫烦python教程_python实现各种最优化算法

    python视频教程栏目介绍各种最优化算法 二分法 函数详见rres,此代码使该算法运行了两次def asdf(x): rres=8*x**3-2*x**2-7*x+3 return rres i=2 ...

  3. 可以获取python整数类型帮助的语句_Python入门第二课--数据类型、条件语句

    Python中整数和浮点数 Python支持对整数和浮点数直接进行四则混合运算,运算规则和数学上的四则运算规则完全一致. 使用括号可以提升优先级,这和数学运算完全一致,注意只能使用小括号,但是括号可以 ...

  4. python的基本语法if语句_Python基础之条件控制操作示例【if语句】

    本文实例讲述了Python基础之条件控制操作.分享给大家供大家参考,具体如下: if 语句 Python中if语句的一般形式如下所示: if condition_1: statement_block_ ...

  5. python数据结构与算法面试_python面试总结4(算法与内置数据结构)

    算法与内置数据结构 常用算法和数据结构 sorted dict/list/set/tuple 分析时间/空间复杂度 实现常见数据结构和算法 数据结构/算法 语言内置 内置库 线性结构 list(列表) ...

  6. python函数几个return语句_Python常用函数--return 语句-阿里云开发者社区

    在Python教程中return 语句是函数中常用的一个语句. return 语句用于从函数中返回,也就是中断函数.我们也可以选择在中断函数时从函数中返回一个值. 案例(保存为 function_re ...

  7. python语言中的单行注释语句_Python 1基础语法一(注释、行与缩进、多行语句、空行和代码组)...

    #第一个注释 print ("Hello, Python!") #第二个注释 输出结果为: ======================= RESTART: E:/python/c ...

  8. python中创建集合的语句_Python 集合(set) 介绍

    集合 set 集合是可变的容器 集合内的数据对象都是唯一的(不能重复多次的) 集合是无序的存储结构,集合中的数据没有先后关系 集合内的元素必须是不可变对象 集合是可迭代对象(可以用for等遍历) 集合 ...

  9. python标准库对象导入语句_Python标准库之Sys模块使用详解

    sys 模块提供了许多函数和变量来处理 Python 运行时环境的不同部分. 处理命令行参数 在解释器启动后, argv 列表包含了传递给脚本的所有参数, 列表的第一个元素为脚本自身的名称. 使用sy ...

  10. python中监控错误的语句_Python学习_07_错误、异常

    地毯式地过语法终于快要结束了... Python中的常见异常 1.NameError:尝试访问一个未初始化的变量 2. ZeroDivisionError:除数为0 3. SyntaxError:Py ...

最新文章

  1. 谷歌将AutoML应用于Transformer架构,翻译结果飙升,已开源!
  2. saltstack的基础入门文档
  3. python考核总结_Python阶段总结
  4. 【C/C++多线程编程之三】创建pthread线程
  5. iso qemu 安装ubuntu_在 Ubuntu 6.06 上安装 qemu 和 kqemu(zz)
  6. python-sdk-demo的打包
  7. Python 的垃圾回收回收机制(源码)
  8. linux ip 访问记录,linux 精确记录用户IP以及用户操作命令
  9. 【今日CV 计算机视觉论文速览 第130期】Thu, 13 Jun 2019
  10. 恩墨学院丨OBCP墨天轮精品课正式上线啦~
  11. 机械制图中外螺纹的画法_机械制图基础常识42条,条条都是经典!
  12. 分布式锁--Redis实现
  13. 十六进制数相加校验和计算程序
  14. 多特征线性回归梯度下降算法的matlab实现
  15. heic转换成jpg,学会这个方法就够了
  16. 关于STM32F107移植到GD32F307后,固件不断重启的一个解决方式
  17. 安卓救砖或删除第三方ROM推广APP
  18. Sigfox融资1.5亿欧元扩展LPWA网络
  19. 数据结构与算法-进阶(八)AOV 网
  20. sparkstreaming的实时黑名单过滤太慢

热门文章

  1. for(int i = 0;i 10;i++)和int i;for(i = 0;i 10;i++)
  2. 常见的几种web api 接口加密签名模式
  3. workgroup无法访问.您可能没有权限 完美问答解
  4. codeforces gym100851 Generators 暴力+贪心
  5. jsp如何跳转java_JSP的三种跳转方式
  6. WIN10重置网络后网络适配器不见了并且适配器驱动感叹号
  7. PMP知识点:项目经理必备的11种人际关系技能
  8. 老李分享:六度分隔理论
  9. 使用igvtools可视化测序深度分布
  10. 嵌入式面试常见问题(三)