坐标变换法求解求解无约束优化问题的例题python实现

3 篇文章 2 订阅
订阅专栏

坐标变换法求解求解无约束优化问题的例题python实现

题目描述:

设目标函数为:

目标函数
取初始点为:
初始点x0
用坐标轮换法求解最优点(极值点)

解:

使用坐标轮换法进行求解无约束优化问题时,需要求解最优步长α,而求解最优步长首先确定函数搜索区间,在这里选择的时进退法进行求解搜索区间,然后用黄金分割法求解α 的近似最优解。

以下为python代码,我是根据这个函数只有x1和x2两个变量为前提自己编写的代码,不适用于三个及三个以上变量的优化问题。(我发现得出的结果并不是最优解,但是与最优解还是较为接近的,但是误差还是比较大(捂脸))

# 坐标轮换法(第一题)  编译环境:JupyterNotebook
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

# 初始值的设置
x_0 = np.array([[-2.0,2.2]])  # 初始矩阵x_0
epoch = 100 # 算法的迭代次数


# 目标函数
def function(x):
    fx = (4 + (9.0/2.0)*(x[0][0]) - 4*(x[0][1]) + (x[0][0])**2 + 2*(x[0][1])**2 - 2*(x[0][0])*(x[0][1]) + (x[0][0])**4 - 
    2*((x[0][0])**2)*(x[0][1]))
    return fx

# 用进退法找到搜索区间中用到的函数,用于计算φ(α)
def fAlpha(x, a, judge):
    if(judge == 0):
        return (function(x + a*np.array([[1, 0]])))
    if(judge == 1):
        return (function(x + a*np.array([[0, 1]])))
    pass

#进退法求搜索区间
def SearchRegion(x, judge):  # x为变量的矩阵,judge为判断盖茨迭代为变量x1还是变量x2
    a_0 = 0
    h = 0.1
    a_1 = a_0
    a_2 = a_0 + h
    
    while(1):
        f1 = fAlpha(x, a_1, judge)
        f2 = fAlpha(x, a_2, judge)

        # 判断前进还是后退
        if(f2 < f1):
            a_3 = a_2 + h
            f3 = fAlpha(x, a_3, judge)
            
            #判断搜索区间
            if(f2 <= f3): # 满足高低高条件,直接输出搜索区间
                return np.array([a_1, a_3])
            if(f2 > f3): # 不满足高低高条件,继续搜索
                h = 2*h
                a_1 = a_2
                a_2 = a_3
        
        # 判断前进还是后退
        if(f2 >= f1):
            h = -h
            # 对调a_1和a_2
            t = a_1
            a_1 = a_2
            a_2 = t
            # 对调f1和f2
            t = f1
            f1 = f2
            f2 = t
            
            a_3 = a_2 + h
            f3 = fAlpha(x, a_3, judge)
            
            # 判断搜索区间
            if(f3 >= f2): # 满足高低高条件,直接输出搜索区间
                return np.array([a_3, a_1])
            if(f3 < f2): # 不满足高低高条件,继续搜索
                h = -2*h
                a_1 = a_2
                a_2 = a_3
        pass
    pass

# 用黄金分割法求最有步长
def GoldenSection(x, search_region, judge):
    a = search_region[0]
    b = search_region[1]
    
    a_1 = b - 0.618*(b - a)
    a_2 = a + 0.618*(b - a)
    
    E_golden_section = 0.01 # 黄金分割法收敛精度预设为0.01
    
    f1 = fAlpha(x, a_1, judge)
    f2 = fAlpha(x, a_2, judge)
    
    # 循环搜索最优步长
    while((abs((b-a)/b) > E_golden_section) & (abs((f2-f1)/f2) > E_golden_section)):
        if(f1 <= f2):
            b = a_2
            a_2 = a_1
            a_1 = b - 0.618*(b - a)
            
        if(f1 > f2):
            a = a_1
            a_1 = a_2
            a_2 = a + 0.618*(b - a)
        pass
    
    f1 = fAlpha(x, a_1, judge)
    f2 = fAlpha(x, a_2, judge)
    return ((a + b)/2)

# 坐标轮换法求最终结果
E_univariate_search = 0.01  # 坐标轮换法的精度预设为0.01
x = x_0
for i in range(epoch):
    x0 = x
    search_region = SearchRegion(x, 0)
    a = GoldenSection(x, search_region, 0)
    x = x + a*np.array([[1, 0]])
    search_region = SearchRegion(x, 1)
    a = GoldenSection(x, search_region, 1)
    x = x + a*np.array([[0, 1]])
    
    fanshu = x - x0
    if ((((fanshu[0][0])**2 + (fanshu[0][1])**2))**0.5 < E_univariate_search):
        break
    pass

print("最优解为:", x[0][0], "," ,x[0][1])
print("极值点为:" , function(x))

运行结果如下:
(不是很正确,因为我通过一个点一个点的试发现还有更小的解,不过相差不大)

python运行结果

以下是目标函数的图像,以及相应的python代码:

import matplotlib.pyplot as plt #绘图用的模块  
from mpl_toolkits.mplot3d import Axes3D #绘制3D坐标的函数  
import numpy as np  

# 目标函数
def fun(x,y):
    fx = 4 + (9.0/2.0)*x - 4*y + (x)**2 + 2*(y)**2 - 2*x*y + (x)**4 - 2*((x)**2)*y
    return fx
  
fig1 = plt.figure() # 创建一个绘图对象  
ax = Axes3D(fig1) # 用这个绘图对象创建一个Axes对象(有3D坐标)  
X = np.arange(-10, 10, 1)  
Y = np.arange(-20, 50, 1) # 创建了从-10到25,步长为0.1的arange对象  
# 至此X,Y分别表示了取样点的横纵坐标的可能取值  
# 用这两个arange对象中的可能取值一一映射去扩充为所有可能的取样点  

X,Y = np.meshgrid(X,Y)  
Z = fun(X,Y) # 用取样点横纵坐标去求取样点Z坐标  

plt.title("Image for the Function") # 总标题  
ax.plot_surface(X, Y, Z, rstride = 1, cstride=1, cmap=plt.cm.coolwarm) # 用取样点(x,y,z)去构建曲面  
ax.set_xlabel('x label', color = 'r') 
ax.set_ylabel('y label', color = 'g')  
ax.set_zlabel('z label', color = 'b') # 给三个坐标轴注明

plt.show() # 显示模块中的所有绘图对象

目标函数图像

优化第九章无约束优化 作业题
清风吹斜阳
10-18 450
无约束优化 The solution to the following problem withandm>n, whereAhas full (column) rankn, is Which stopping criteria are reasonable when solving an optimization problem minimize f(x) u...
优化第九章无约束优化 9.1无约束优化问题
清风吹斜阳
02-26 1168
9.1无约束优化问题 例子 强凸性及其含义 无约束优化问题 其中是二次可微凸函数(dom(f)是开集),假设该问题可解,存在最优点,这里用表示最优值。 由于f是二次可微凸函数,最优点应满足: 所以无约束优化问题求解变成了求解上述方程的解。一般情况下,必须采用迭代算求解此方程,即计算点列使得时,,这样的点列被称为优化问题的极小化点列。当时,算将终止,其中是设定的容许误差值。 初始点...
坐标轮换法
10-22
通过坐标轮换法求解一维搜索问题的最优解,坐标轮换法是每次搜索只允许一个变量变化,其余变量保持不变,即沿坐标方向轮流进行搜索的优化方式。
无约束--直接
qq_51698536的博客
04-25 563
直接 优点 可以不用计算梯度,直接得到最优值。 1坐标轮换法 思想:n维坐标系的坐标方向即为下一次迭代的方向。 例如:二维f(x,y) = x+y;搜索方向为p0(1,0);p1(0,1); 流程如下: 收敛的方向不一定是下降方向,收敛速度可能也比较慢,和最速下降一样,出现锯齿状、 讲完原理,咱们自然而然(naturally)的就要讲简单的例题来进行应用了 说完例题咱们说说什么样的题适合他,正所谓美女配枭雄。 坐标轮换法正如枭雄一样,适合沉鱼落雁,变量较少,函数较好的题目。但是如果不够美的花,枭雄自
坐标轮换法(算分析+python代码解释)
最新发布
m0_61209712的博客
11-18 421
坐标轮换法(算分析+python代码解释)
无约束优化
dushenzhi的专栏
10-13 2059
估计有些读者看到这个题目的时候会觉得很数学,和自然语言处理没什么关系,不过如果你听说过最大熵模型、条件随机场,并且知道它们在自然语言处理中被广泛应用,甚至你明白其核心的参数训练算中有一种叫LBFGS,那么本文就是对这类用于解无约束优化的Quasi-Newton Method的初步介绍。   事实上,这个系列的作者是我的师兄jianzhu,他在中文分词、语言模型方面的研究很深入,如果大家对于
Python代码实现坐标轮换法求解多维最优化问题
taozibaby的博客
01-08 857
Python代码实现坐标轮换法求解多维最优化问题
python坐标转换程序
09-15
python坐标转换程序
坐标轮换法求最优解
11-20
主要通过matlab编程利用坐标轮换法求解无约束非线性规划问题。给出了具体的操作步骤和方
坐标轮换法matlab程序
04-14
坐标轮换法matlab程序
约束优化问题坐标轮换法程序设计
08-12
文档给出了约束优化问题中的坐标轮换法程序设计方,也可进一步推广到其它优化中。
8.1坐标轮换法详解.pdf
10-28
8.1坐标轮换法详解.pdf 8.1坐标轮换法详解.pdf
坐标轮换法C语言相关程序
12-20
坐标轮换法C语言相关程序,已运行,结果正确可靠,相信对初学者有一定帮助
坐标轮换法寻优
01-09
matlab、坐标轮换法、寻优、画图、记录结点、最优化理论与方
坐标轮换法优化设计
11-09
将多维无约束优化问题分解、转化为一系列一维优化问题,轮换沿各个坐标轴一维搜索,直到求得最优点。 在每次迭代内部,要依次沿各坐标轴进行N次(N为优化问题的维数)一维搜索。这种一维搜索是固定其它N-1维变量,视为常量,然后进行一维搜索,,对于第k轮迭代,须重复N次该式的一维搜索,搜索的参数为ajk(即要优化的参数是ajk),为相对第j维变量的搜索步长,搜索方向为第j维空间坐标的方向。当k轮迭代结束后,本轮搜索的重点作为下一轮的起点,即
EPNP根据像素坐标求解实际三维世界坐标python实现
06-29
EPNP根据像素坐标求解实际三维世界坐标python实现
坐标下降求解Lasso回归
11-21
利用随机坐标下降和循环坐标下降求解lasso回归,并作比较。
zuobiaolunhuanfa.rar_坐标轮换法_工程优化_工程约束_工程约束优化_无约束优化
07-14
将工程问题转化为数学问题,进行无约束优化,求得极小值。
Python实现 采用模拟退火算求解商旅问题
07-18
现有5个城市,对应的坐标分别为(x1,y1),(x2,y2),(x3,y3),(x4,y4),(x5,y5)。一个旅行商人要拜访这5个城市,他必须选择所要走的最短路径,要求每个城市只能拜访一次,而且最后要回到原来出发的城市。要求:采用...
现代设计方及其应用matlab坐标轮换法无约束优化问题
06-02
下面以最小化 Rosenbrock 函数为例,演示如何使用 MATLAB 中的坐标轮换法求解无约束优化问题。 Rosenbrock 函数是一个经典的无约束优化问题,其公式如下: $$f(x_1, x_2) = (1 - x_1)^2 + 100(x_2 - x_1^2)^2$$ ...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 利用Python对MNIST手写数据集进行数字识别(初学者入门级) 30657
  • C#与MySQL连接并实现增删改查操作入门(winform窗体应用) 7293
  • 计算机网络自学笔记002_Real(物理层) 5393
  • 坐标变换法求解求解无约束优化问题的例题python实现 2859
  • 寻找利用神经网络识别手写数据集MNIST程序的最佳参数(learning_rate、nodes、epoch) 1848

分类专栏

  • JVM 1篇
  • 计算机网络自学 7篇
  • Maven 1篇
  • JUC并发编程 2篇
  • Spring自学 6篇
  • Java自学 22篇
  • 设计模式自学 7篇
  • LeetCode 5篇
  • 数据结构自学 3篇
  • SQL学习 5篇
  • Git版本控制 1篇
  • C#自学 12篇
  • C语言复习 4篇
  • Python 3篇
  • 笔记
  • C++自学 7篇

最新评论

  • 利用Python对MNIST手写数据集进行数字识别(初学者入门级)

    woewo_understand: 72. self.who += self.lr * np.dot((output_errors * final_outputs * (1.0 - final_outputs)),np.transpose(hidden_outputs)) 75.self.wih += self.lr * np.dot((hidden_errors * hidden_outputs * (1.0 - hidden_outputs)), np.transpose(inputs)) 大佬,这个权重迭代是什么公式算法啊?我没找到表情包

  • 利用Python对MNIST手写数据集进行数字识别(初学者入门级)

    nuR 雄世刘: sorry,我看错了 没有问题

  • 利用Python对MNIST手写数据集进行数字识别(初学者入门级)

    nuR 雄世刘: 第25行貌似笔误了吧

  • 利用Python对MNIST手写数据集进行数字识别(初学者入门级)

    一只小野兔: 大佬,可以画一个设计的流程图吗

  • 利用Python对MNIST手写数据集进行数字识别(初学者入门级)

    Xiaoyu175100: 大佬,你这我用了输出是一个图片,能不能改成可以同时输出二维值矩阵来?

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • Java类加载机制(JVM)
  • 计算机网络自学笔记008_Real(应用层)
  • 计算机网络自学笔记007_Real(传输层)
2022年32篇
2021年29篇
2020年25篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仲子_real

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司塘坑网站建设报价龙岩网站排名优化报价呼和浩特网站制作多少钱金昌外贸网站建设报价民治网页制作多少钱那曲营销型网站建设阿里关键词按天扣费推荐观澜网站建设价格宜宾企业网站制作报价阳江百度网站优化排名济南百度竞价公司双龙网站设计模板洛阳网站设计模板价格德州推广网站报价阳江如何制作网站价格晋城百度爱采购哪家好仙桃网站推广方案价格钦州网站优化哪家好郑州建网站哪家好广州关键词按天计费松岗百度关键词包年推广推荐鄂州关键词排名多少钱长沙网站关键词优化推荐怀化外贸网站制作诸城网站制作设计公司来宾优秀网站设计价格南澳网站改版多少钱遂宁推广网站价格佛山营销型网站建设报价滨州seo优化报价歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化