【最优化方法】实验四 约束最优化方法的MATLAB实现

news2024/11/17 3:57:09

实验的目的和要求:通过本次实验使学生较为熟练使用MATLAB软件,并能利用该软件进行约束最优化方法的计算。

实验内容:

1、罚函数法的MATLAB实现

2、可行方向法的MATLAB实现

学习建议:

本次实验就是要通过对一些具体问题的分析进一步熟悉软件的操作并加深对理论知识的理解。

重点和难点:

可行点和辅助函数选取。

一 罚函数法

用罚函数法解min f(x)=(x1-1)2+x22

​ S.T. g(x)=x2-1>=0

编写下面m文件

fahanshu.m

syms x1 x2 

f=(x1-1)^2+x2^2;

g=x2-1;

x=[x1;x2];

x0=[0;0];

e=0.0001;M=1;

while abs(subs(g,x,x0))>e

  if subs(g,x,x0)<0

​    Q=f+M*g^2;

  else 

​    Q=f;

  end

  x0=xzNewton(Q,x,x0,0.0001);

  M=10*M;

end

x0

运行得:fahanshu

x0 =

1.0000

0.9999

与理论值x=[1;1]很接近。

二 投影梯度法

1.梯度投影法基本原理和步骤

思想:当迭代点是可行域的内点时,将目标函数负梯度作为搜索方向,当迭代点在可行域边界上时,将目标函数负梯度在可行域边界上的投影作为搜索方向。无论何种情况,所构造的方向都是可行下降方向。然后在可行域内沿该方向进行最优一维搜索得到新的迭代点。

img

img

MATLAB实现:

2.代码及数值算例:

(1) 程序源代码:

function [ X,FMIN,K ] = tidutouying( f,A,b,x1,x,e )

%  [ X,FMIN,K ] = tidutouying( f,A,b,x1,e ) 梯度投影法

%  f  目标函数

%  A  约束矩阵  b 右端项

%  x1 初始点 x 自由变量

%  e  精度要求

%  X  极小点

%  FMIN 极小值

%  K  迭代次数

%  张超编写与2014/5/3

count=1;

n=length(x1);

tf=jacobian(f,x)';

while 1

  [A1,A2,b1,b2,k]=fenjie(A,b,x1);

  while 1

  M=A1;

  if isempty(M)

​    P=eye(n);

  else

​    P=eye(n)-M'*(M*M')^(-1)*M;

  end

  Pk=-P*subs(tf,x,x1);

  if norm(Pk)<=e

​    if isempty(M)

​      x1;break;else

​      W=(M*M')^(-1)*M*subs(tf,x,x1);

​      u=W;if min(u)<0for i=1:length(u)if u(i)==min(u)j=i;endendA1(j,:)=[];else 

​        x1;break;endend

  else

​    b_=b2-A2*x1;

​    P_=A2*Pk;for i=1:length(P_)if P_(i)<0r(i)=b_(i)/P_(i);elser(i)=10000;endend

​    rmax=min(r);

​    syms t

​    y=x1+t*Pk;ft(t)=subs(f,x,y);[r1]=find0618(ft,0,double(rmax),0.00001);

​    x1=x1+r1*Pk;break;

  end

  end

  count=count+1;

  if isempty(M)    

   break;

  end

  if min(u)>=0break;

  end

end

 X=x1;

 FMIN=subs(f,x,X);

 K=count;

end

 

function [A1,A2,b1,b2,k ] = fenjie( A,b,x )

% 分解起作用约束

A=A;

 b=b;

 x0=x;

 k=0;q=0;

s=size(A);

A1=zeros(s(1),s(2));

 A2=zeros(s(1),s(2));

 b1=zeros(s(1),1);

 b2=zeros(s(1),1);

 for i=1:s(1)

  gi=A(i,:)*x0-b(i);

  if abs(gi)<0.0000001 

​    k=k+1;A1(k,:)=A(i,:);b1(k,1)=b(i);

  else 

​    q=q+1;A2(q,:)=A(i,:);b2(q,1)=b(i);

  end

 end

if k>0

  A1=A1(1:k,:);

  b1=b1(1:k,:);

else

  A1=[];

end

if q>0

  A2=A2(1:q,:);

  b2=b2(1:q,:);

end 

end

(2) 数值算例:

Min f(x)= 2*x1^2+2*x2^22*x1*x2 – 4*x1 – 6*x2

S.T. –x1 – x2>=2

–x1 – 5*x2>=5

x1>=0

x2>=0

初值x0=[0;0]

在matlab command window里输入

syms x1 x2 

f=2*x1^2+2*x2^2-2*x1*x2-4*x1-6*x2;

A=[-1 -1;-1 -5;1 0;0 1];

b=[-2;-5;0;0];

x1=[0;0];

x=[x1;x2];

e=0.01;

[X,FMIN,K]=tidutouying(f,A,b,x1,x,e)

 

X =

  1.1292

  0.7742

FMIN =

  -7.1613

N =

  16

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1712585.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

抠像标签合并到原图,jpg 和 png合并,查看标签是否准确

抠像 原图 和 标签合并&#xff0c;查看抠像是否准确 合并后的图&#xff0c;是带有 羽化 效果的 import osimport cv2 import numpy as npdef apply_mask_with_feathering(original_image_path, mask_image_path):# 读取原图和mask图original_image cv2.imread(original_im…

一分钟教你学浪app视频怎么缓存

你是否在学浪app上苦苦寻找如何缓存视频的方法&#xff1f;你是否想快速、轻松地观看自己喜欢的视频内容&#xff1f;那么&#xff0c;让我们一起探索一分钟教你如何缓存学浪app视频的技巧吧&#xff01; 学浪下载工具我已经打包好了&#xff0c;有需要的自己下载一下 学浪下…

豆瓣内容抓取:使用R、httr和XML库的完整教程

概述 在数据分析和统计领域&#xff0c;R语言以其强大的数据处理能力和丰富的包库资源而闻名。它不仅提供了一个灵活的编程环境&#xff0c;还拥有专门用于数据抓取和处理的工具&#xff0c;如httr和XML库。这些工具使得从各种网站上抓取数据变得简单而高效。 豆瓣网站作为一个…

Excel 单元格式 “万” 和 “亿” 展示

先看结果 实现方法&#xff1a; 将单元格式 格式设置为 [>999999]0!.00,,"亿";[>999]0!.0,"万";0 我这里设置的是大于 999 和 99万 生效对应的万和 亿 如果想要达到1万 和达到 1亿 才生效可以设置为如下 [>1000000000]0!.00,,"亿"…

RUST 和 GO 如何管理它们的内存

100编程书屋_孔夫子旧书网 Go 中的内存管理 Go 中的内存不会在缓存键被驱逐时立即释放。 相反&#xff0c;垃圾收集器会经常运行以发现任何没有引用的内存并释放它。 换句话说&#xff0c;内存会一直挂起&#xff0c;直到垃圾收集器可以评估它是否真正不再使用&#xff0c;而…

AI架构设计6:vLLM

训练大型语言模型以及微调的教程比比皆是&#xff0c;但关于在生产环境中部署它们并监控其活动的资料相对稀缺。上个章节提到了未来云原生的AI是趋势&#xff0c;然而涉及到云原生会比较偏技术。而在此之前为了解决大模型部署量产的问题&#xff0c;社区也一直在探索&#xff0…

OLED曲面屏手机跌下神坛,曲面边缘老化迅速,泛黄严重

在过去国产手机都喜欢将曲面屏用到旗舰手机上&#xff0c;借此凸显旗舰手机的优越性和独特性&#xff0c;然而在实际使用中&#xff0c;曲面屏的弊端日益明显&#xff0c;如今笔者就遭遇了这个问题。 因手上刚购买的天玑6080、骁龙4G2新机存在卡顿问题&#xff0c;使用很不爽&a…

面向链接预测的知识图谱表示学习方法综述

源自&#xff1a;软件学报 作者&#xff1a;杜雪盈, 刘名威, 沈立炜, 彭鑫 注&#xff1a;若出现无法显示完全的情况&#xff0c;可搜索“人工智能技术与咨询”查看完整文章 摘 要 作为人工智能的重要基石, 知识图谱能够从互联网海量数据中抽取并表达先验知识, 极大程度解决…

【数据结构】冒泡排序、直接插入排序、希尔排序详解!

文章目录 1. 冒泡排序&#x1f34e;2. 直接插入排序&#x1f34e;3. 希尔排序&#xff08;缩小增量排序&#xff09;&#x1f34e; 1. 冒泡排序&#x1f34e; &#x1f427; 基本思想&#xff1a; 比较相邻的元素。如果第一个比第二个大&#xff0c;就交换他们两个。 大的数据…

【Python-基础】函数合集

def嵌套def 调用外部函数aa时&#xff0c;如果aa中没有调用内部函数bb&#xff0c;则bb函数不执行。 def aa():print("1")def bb():print("2")print("3")if __name__ "__main__":aa()未待完续…

LeetCode---链表

203. 移除链表元素 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 代码示例1&#xff1a;(直接使用原来的链表来进行移除节点操作) //时间复杂度: O(n) //空间复杂度: O(1) class Solu…

海博思创储能系统产品再获认可,获得杰出项目类别入围资格

近日&#xff0c;2024年欧洲智慧能源展览会大奖&#xff08;The smarter E AWARD 2024&#xff09;公布了入围名单&#xff0c;该奖项设有五个类别&#xff1a;光伏、储能、电动出行、智能综合能源和杰出项目奖&#xff0c;旨在表彰能源领域中的卓越创新成果。 在入围项目中&a…

基于STM32实现智能楼宇对讲系统

目录 引言环境准备智能楼宇对讲系统基础代码示例&#xff1a;实现智能楼宇对讲系统 音频输入和输出按键控制显示屏和用户界面网络通信应用场景&#xff1a;楼宇安防与智能家居问题解决方案与优化收尾与总结 1. 引言 本教程将详细介绍如何在STM32嵌入式系统中使用C语言实现智能…

菜鸟的JavaSE学习之旅7

这是一个目录 数组工具类Arrays数学工具类Math继承重写&#xff08;Override&#xff09;覆盖、覆写注意 构造方法super关键字用法this关键字super和this 抽象抽象方法和抽象类格式抽象方法和抽象类使用抽象方法和抽象类注意事项 数组工具类Arrays java.util.Arrays是一个与数…

手写promise、call、apply、debounce、throttle 等

1、promise 1.1 实现resolve和reject class MyPromise {// 构造方法constructor(executor) {// 初始化值this.initValue()// 初始化this指向this.initBind()try {// 执行传进来的函数executor(this.resolve, this.reject)} catch (e) {// 捕捉到错误直接执行rejectthis.rejec…

微调真的能让LLM学到新东西吗:引入新知识可能让模型产生更多的幻觉

大型语言模型(llm)是在巨大的文本语料库上训练的&#xff0c;在那里他们获得了大量的事实知识。这些知识嵌入到它们的参数中&#xff0c;然后可以在需要时使用。这些模型的知识在培训结束时被“具体化”。在预训练结束时&#xff0c;模型实际上停止学习。 对模型进行对齐或进行…

【NumPy】全面解析arange函数:高效创建数值范围数组

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

如何高效搜索?99%的人都不知道的搜索进阶小技巧

如何高效搜索任何你想要的信息&#xff1f; 比如怎么找第一手的行业研究报告&#xff1f; 在哪查高清无码的图片素材&#xff1f; 怎么搜最新的AI工具教程&#xff1f; 遇到以上问题你会怎么搜&#xff1f; 可能大部分人都是直接打开百度查关键词&#xff0c;虽然随便一搜…

2024年学浪课程下载工具

学浪下载工具我已经打包好了&#xff0c;有需要的自己下载一下 学浪下载器链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;1234 --来自百度网盘超级会员V10的分享 1.首先解压好我给大家准备好的压缩包 2.打开解压好的文件夹里面的N_m3u8D文件夹&#xff0c;然…

如何理解和使用 this 关键字

this 关键字是许多编程语言中的一个核心概念&#xff0c;在面向对象编程&#xff08;OOP&#xff09;中尤为重要。在JavaScript、Java、C、C#等语言中&#xff0c;this 扮演着至关重要的角色。理解 this 的意义和用法&#xff0c;对于编写清晰、有效的代码至关重要。 什么是th…