当前位置: 首页 > news >正文

数模方法论-整数规划

一、基本概念

非线性规划的应用包括工程设计、资源分配、经济模型等。在求解过程中,由于非线性特性,常用的方法有梯度法、牛顿法、启发式算法等。求解非线性规划问题时,解的存在性和唯一性通常较难保证,且可能存在多个局部最优解。

        非线性规划是数学建模中处理优化问题的一种方法,尤其在目标函数或约束条件为非线性时。它的基本形式可以表示为:

二、实际应用

1、投资决策问题 

 三、程序代码求解方法

1、例题一

MATLAB求解 
clc,clear
x0=[150 85 150 145 130 0];
y0=[140 85 155 50 150 0];
q=[243 236 220.5 159 230 52];
xy0=[x0; y0];
d0=dist(xy0);   %求矩阵各个列向量之间的距离
d0(find(d0==0))=inf;
a0=asind(8./d0)  %以度为单位的反函数
xy1=x0+i*y0
xy2=exp(i*q*pi/180)
for m=1:6for n=1:6if n~=mb0(m,n)=angle((xy2(n)-xy2(m))/(xy1(m)-xy1(n))); endend
end
b0=b0*180/pi;
dlmwrite('txt1.txt',a0,'delimiter', '\t','newline','PC');
dlmwrite('txt1.txt','~','-append');       %往纯文本文件中写LINGO数据的分割符
dlmwrite('txt1.txt',b0,'delimiter', '\t','newline','PC','-append','roffset', 1)
 Python求解 
import numpy as np# 初始化数据
x0 = np.array([150, 85, 150, 145, 130, 0])
y0 = np.array([140, 85, 155, 50, 150, 0])
q = np.array([243, 236, 220.5, 159, 230, 52])
xy0 = np.vstack((x0, y0))# 计算距离矩阵
def dist(xy):return np.linalg.norm(xy[:, np.newaxis] - xy[:, np.newaxis].T, axis=0)d0 = dist(xy0)
d0[d0 == 0] = np.inf  # 将距离为0的值设为无穷大a0 = np.degrees(np.arcsin(8.0 / d0))  # 以度为单位的反正弦# 复数表示
xy1 = x0 + 1j * y0
xy2 = np.exp(1j * np.radians(q))# 计算角度矩阵
b0 = np.zeros((6, 6))
for m in range(6):for n in range(6):if n != m:b0[m, n] = np.angle((xy2[n] - xy2[m]) / (xy1[m] - xy1[n]))b0 = np.degrees(b0)# 写入文件
np.savetxt('txt1.txt', a0, delimiter='\t', newline='\n')
with open('txt1.txt', 'a') as f:f.write('~\n')  # 写入分隔符np.savetxt(f, b0, delimiter='\t', newline='\n', fmt='%f', header='', comments='', footer='', encoding='utf-8')

2、例题二

 MATLAB求解 

function [g,h]=fun2(x);
g=[-x(1)^2+x(2)-x(3)^2
x(1)+x(2)^2+x(3)^3-20];  %非线性不等式约束
h=[-x(1)-x(2)^2+2
x(2)+2*x(3)^2-3]; %非线性等式约束function f=fun1(x);
f=sum(x.^2)+8;[x,y]=fmincon('fun1',rand(3,1),[],[],[],[],zeros(3,1),[],'fun2')

Python求解

import numpy as np
from scipy.optimize import minimize# 非线性不等式约束
def constraints_inequality(x):return np.array([-x[0]**2 + x[1] - x[2]**2,x[0] + x[1]**2 + x[2]**3 - 20])# 非线性等式约束
def constraints_equality(x):return np.array([-x[0] - x[1]**2 + 2,x[1] + 2*x[2]**2 - 3])# 目标函数
def objective(x):return np.sum(x**2) + 8# 初始猜测
x0 = np.random.rand(3)# 定义约束
cons = [{'type': 'ineq', 'fun': constraints_inequality},{'type': 'eq', 'fun': constraints_equality}]# 优化
result = minimize(objective, x0, constraints=cons, bounds=[(0, None)]*3)# 输出结果
print("Optimal solution:", result.x)
print("Objective function value:", result.fun)

http://www.lryc.cn/news/443182.html

相关文章:

  • 【问题随记】在使用 AuthenticationManager 的时候,出现循环依赖问题 —— `java.lang.StackOverflowError`
  • 2024年华为杯-研赛F题论文问题一二讲解+代码分享
  • 代码随想录训练营第34天|dp前置转移
  • 乐观锁、悲观锁
  • Java客户端SpringDataRedis(RedisTemplate使用)
  • wsl2桥接网络 ubuntu到弃坑到又跳坑
  • WIFI路由器的套杆天线简谈
  • 希尔排序(C语言实现)
  • LLVM 中的Value、User、Use设计
  • C++智能指针入门教程(C++11)
  • 常用工具推荐!分享7款AI论文修改软件工具网站
  • 怎么解除BitLocker对磁盘的加密?
  • 群晖使用Docker部署WPS Office并实现异地使用浏览器制作办公文档
  • Unity3d 以鼠标位置点为中心缩放视角(正交模式下)
  • Git清除某文件所有历史提交记录
  • jacoco生成单元测试覆盖率报告
  • 【CSS Tricks】如何做一个粒子效果的logo
  • 如何使用ssm实现基于Javaweb的网上花店系统的设计与实现
  • Elastic 的 OpenTelemetry PHP 发行版简介
  • TCP 和 UDP 协议的区别?
  • 【PHP】使用thinkphp5查询最大值时,把varchar类型字段转换成数字
  • Java 正则表达式详解
  • MySQL篇(窗口函数/公用表达式(CTE))(持续更新迭代)
  • Jira Cloud涨价5%-20%,钉钉项目Teambition成优选替代
  • Python语言基础教程(下)4.0
  • 【HTTP】构造HTTP请求和状态码
  • Delta Lake如何使用
  • 面试题 - parallelStream() 有什么缺点 - ForkJoinPool,它和传统的线程池(如 ThreadPoolExecutor)的区别
  • 切换淘宝最新镜像源npm详细讲解
  • STM32F407单片机编程入门(十二) FreeRTOS实时操作系统详解及实战含源码