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

数模方法论-整数规划

一、基本概念

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

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

二、实际应用

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:6
     for n=1:6
         if n~=m
         b0(m,n)=angle((xy2(n)-xy2(m))/(xy1(m)-xy1(n))); 
         end
     end
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.kler.cn/a/314314.html

相关文章:

  • JVM详解:类的加载过程
  • aws-athena查询语句总结
  • [宁波24届]平方数
  • 机器学习在医疗健康领域的应用
  • 使用etl工具kettle的日常踩坑梳理之二、从Hadoop中导出数据
  • 论文解析:边缘计算网络中资源共享的分布式协议(2区)
  • Python类及元类的创建流程
  • C#进阶-基于雪花算法的订单号设计与实现
  • [Python数据可视化] Plotly:交互式数据可视化的强大工具
  • 15.9 grafana-deployment-yaml讲解
  • 掌上高考爬虫逆向分析
  • [Python数据可视化]探讨数据可视化的实际应用:三个案例分析
  • lvs-nat模式实验详解
  • 【全网最全】2024年华为杯研赛A题成品论文获取入口(后续会更新)
  • 面试时被问的问题
  • 后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0917)
  • 新版ssh客户端无法连接旧版服务器sshd的方法
  • PHP基础语法入门指南
  • CMake中的PUBLIC、PRIVATE 和 INTERFACE用法
  • C++ | Leetcode C++题解之第423题从英文中重建数字
  • 【CPU】CPU的物理核、逻辑核、超线程判断及L1、L2、L3缓存、CacheLine和CPU的TBL说明
  • vue-入门速通
  • C++_数据结构详解
  • MATLAB入门基础篇
  • 一个安卓鸿蒙化工具
  • SpringBoot环境配置(Spring Boot Profile)