最优化问题求解及Lingo教程

article/2025/6/23 6:24:19

介绍

Lingo是一款求解最优化问题的软件,可以用于求解非线性规划,也可以用于一些线性和非线性方程组的求解等,功能十分强大,是求解优化模型的最佳选择。

最优化问题

首先介绍一下什么是最优化问题。

最优化问题,即在所有可行的方案中选出使得目标最优的方案的实际问题。

优化问题的三要素是:

  • 决策变量
  • 约束条件
  • 目标函数

数学规划/函数优化问题的标准形式

min ⁡ / max ⁡ f ( x ) s . t . g i ( x ) ≤ 0 , i = 1 , … , m 1 h j ( x ) = 0 , j = 1 , … , m 2 f : D → R , D ⊆ R n \min/ \max f(x)\\ s.t. g_i(x)\leq0,i=1,\dots,m_1\\ h_j(x)=0,j=1,\dots,m_2\\ f:D \rightarrow R,D \subseteq R^n min/maxf(x)s.t.gi(x)0,i=1,,m1hj(x)=0,j=1,,m2f:DR,DRn

优化问题分类

根据决策变量取值情况不同,分为连续型离散型

根据有无约束条件分为无约束优化带约束优化

根据处理思想方法不同,分为数学规划(函数优化问题)、组合优化、图论与网络流、动态规划、目标优化、模糊优化、随机优化、对策与决策……

Lingo教程

求解LP问题

min ⁡ = 2 ∗ x 1 + 3 ∗ x 2 s . t . x 1 + x 2 ≥ 350 x 1 ≥ 100 2 ∗ x 1 + x 2 ≤ 600 \min=2*x_1+3*x_2\\ s.t. x_1+x_2 \geq 350\\ x_1 \geq 100\\ 2*x_1+x_2 \leq 600 min=2x1+3x2s.t.x1+x2350x11002x1+x2600

求解这样一个问题,只需直接输入如下代码,写法基本与数学公式一直,不用改写成标准形式

min=2*x1+3*x2;
x1+x2>=350;
x1>=100;
2*x1+x2<=600;

点击🎯图标运行:

LP-Lingo

可以看到直接识别出了问题类型,并找到了全局最优解。

求解MILP问题

在这里插入图片描述

@free: 可正可负(默认大于等于0)

@gin:整数

求解IQP问题

一定要在Lingo选项->求解非线性菜单中勾选二次规划识别!!否则会按照INLP问题求解,只能得出局部最优解。

image-20200907165607014

max=98*x1+277*x2-x1^2-0.3*x1*x2-2*x2^2;
x1+x2<=100;
x1<2*x2;
@gin(x1);@gin(x2);

IQP

运算符

  • 算数运算符 + - * / ^
  • 关系运算符 <(=) = >(=)
  • 逻辑运算符
    • 否定 #NOT#
    • 相等 #EQ#
    • 不等 #NE#
    • 与 #AND#
    • 或 #OR#
    • 大于 #GT#
    • 大于等于 #GE#
    • 小于等于 #LE#
    • 小于 #LT#

数学函数

  • @ABS(x) 绝对值
  • @SIN(x),@COS(x) … 三角函数
  • @EXP(x) 返回 e x e^x ex
  • @LOG(x) 自然对数
  • @SIGN(x) x<0返回-1;否则返回1
  • @FLOOR(x) 返回x靠近0的整数部分,如@FLOOR(1.2)=1,@FLOOR(-2.3)=-2

金融函数

  • @ f p a ( r , n ) = ∑ k = 1 n 1 ( 1 + r ) k = 1 − ( 1 + r ) − n r @fpa(r,n)=\sum_{k=1}^n{\frac{1}{\left( 1+r \right) ^k}=}\frac{1-\left( 1+r \right) ^{-n}}{r} @fpa(r,n)=k=1n(1+r)k1=r1(1+r)n
  • @ f p l ( r , n ) = ( 1 + r ) − n @fpl(r,n)=\left( 1+r \right) ^{-n} @fpl(r,n)=(1+r)n

概率函数

  • @pbn(p,n,x) 二项分布
  • @pcx(n,x) 卡方分布
  • @pfd(n,d,x) F分布
  • ……

变量界定函数

Lingo变量默认是非负的

  • @bin(x) x=0或1
  • @bnd(L,x,U) L ≤ x ≤ U L \le x \le U LxU
  • free(x) 实数
  • @gin(x) 整数

条件判断函数

@IF(logical_condition,true_result,false_result)

例:分段函数
f ( x ) = { 100 , x > 0 2 x , x ≤ 0 f\left( x \right) =\begin{cases} 100,x>0\\ 2x, x\le 0\\ \end{cases} f(x)={100,x>02x,x0
fx=@if(x #gt# 0,100,2*x)

集合操作函数

  • @in(set_name,index_1[,index_2]) 是否在集合中,返回0/1
  • @wrap(index,limit) 取模,返回 j=index-k*limit=index(mod limit) +1, k为整数,保证j在[1, limit]内
  • @size(set_name) 集合成员个数

集合循环函数

  • @FOR(set_name:constraint_expressions) 对每个元素生成约束
  • @MAX(set_name:expressions) 表达式的最大值
  • @MIN(set_name:expressions) 表达式的最小值
  • @SUM(set_name:expressions) 表达式的和

例:产生序列{1,4,9,16,25}

model:
sets:number/1..5/:x;
endsets@for(number(i):x(i)=i^2);
end

例:

s=@sum(number(i)|i#le# 5: x); !前5个求和
m=@min(number(i)|i#ge# 5: x); !5个之后的最小值

在这里插入图片描述

输入输出函数

  • @OLE excel表格读取
  • @file
  • @text

求解状态

  • @status()
  • 0 Global Optimum 全局最优
  • 1 Infeasible 不可行
  • 2 Unbounded 无界
  • 3 Undetermined 不确定
  • 4 Feasible 可行
  • 5 Infeasible or Unbounded
  • 6 Local Optimum 局部最优
  • 7 Locally Infeasible 局部不可行(可行解可能存在,但lingo没找到)
  • 8 Cutoff 目标函数的截断值被达到
  • 9 Numeric Error 算数错误

Lingo建模技巧

  • 尽量使用实数优化,减少整数约束和整数变量
  • 尽量使用光滑优化,少用绝对值、符号函数、多变量求最大/最小值、四舍五入、取整等
  • 尽量使用线性模型,x/y<5改为x<5y
  • 合理设置上下界,尽可能给出变量初始值
  • 参数数量级适当,不同参数数量级差距一般要求小于3

原文地址:https://blog.luzy.top/posts/2069852828/


http://chatgpt.dhexx.cn/article/b0RRLQZw.shtml

相关文章

lingo入门教程之三 --- 文件数据处理

有时候我们想输入的数据是在一个Excel表格或者其他什么形式中&#xff0c;或者说这里数据是实时变化的并不利于直接在程序中输入&#xff0c;耳而应该在程序之外将数据存储&#xff0c;实现数据与程序的分离存储&#xff0c;这个时候就涉及到程序与数据之间的传递 下面简要介绍…

lingo入门教程之一 初识lingo

lingo对于一些线性或者非线性的规划&#xff0c;优化问题非常有效 首先介绍一下&#xff0c;在lingo中运行程序时出现的页面&#xff08;在工具栏点击类似靶子一样的图标便可运行&#xff09; Solver status:求解器(求解程序)状态框 Model Class:当前模型的类型:LP&#xff0c;…

lingo3d_基于官方教程的分析

lingo3d可以允许web内使用3d元素&#xff0c;其定位是web端游戏引擎。跟随官方教程我完成了一个简单的demo&#xff0c;即控制小人在三维空间穿行&#xff0c;并且可以显示相应物品信息 官方使用vitereact&#xff0c;故我们跟随其搭建 1.搭建主场景 这里与一般react项目出入不…

Lingo软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 Lingo是一款专门为解决线性和非线性优化问题而设计的专业软件&#xff0c;广泛应用于运筹学、工程管理、交通管理、生产调度、物流管理等领域。它提供了一个易于使用的界面和灵活的求解器&#xff0c;能够高效地求解大规模的线性…

数学建模学习(25):一夜整理的Lingo入门教程,助力建模国赛!

文章目录 前言使用教程基本语法影子价格敏感性分析以上总结变量约束与函数全局最优解(最值)局部最优解(极值)总结前言 在上一篇文章我用到了lingo,但我盲猜一下大家可能不会用lingo做数学计算,因此我在这里做一个教程。 使用教程 下载地址:微信软件管家。 假设已经写…

java调用lingo实例_LINGO使用教程(一)

LINGO是用来求解线性和非线性优化问题的简易工具。LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果。 1.LINGO快速入门 当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗口: 外层是主框架窗口,包含了…

c语言程序框图示范,C语言程序框图courseware.ppt

第3章控制结构&#xff1b;目录; ●基本要求: 1)熟悉C语言程序结构框图&#xff1b; 2)熟悉C语言的两分支结构&#xff0c;多分支结构和循环结构&#xff1b; 3)熟悉结构化程序设计方法. ●学习要点: 1)流程图&#xff0c;NS图&#xff0c;循环结构&#xff1b; 2)结构化程序设…

C语言经典100例-9

c语言经典100例 题目&#xff1a;要求输出国际象棋棋盘。 程序分析&#xff1a;国际象棋棋盘由64个黑白相间的格子组成&#xff0c;分为8行*8列。用i控制行&#xff0c;j来控制列&#xff0c;根据ij的和的变化来控制输出黑方格&#xff0c;还是白方格。 如果出现乱码情况请参…

C语言程序设计100个经典例子

<1>数字排列。 #include <stdio.h> int main() {int sum 0;for(int i 1; i< 5; i){for(int a 1; a< 5; a){for(int b 1; b< 5; b){if(i!a && i!b && a!b){printf("%d%d%d", i, a, b);putchar(\n);sum sum 1;}}}}printf("%…

eclipse的简介

1.打开eclipse软件 2.新建工程 file -> new ->java Project

Eclipse开发工具--简介

简介 Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言&#xff0c;它只是提供了一个基础的底层支持&#xff0c;而后针对于不同的编程语言都会提供有相应的插件支持。 Eclipse最初是由IBM公司开发的替代商业软件Visual Age for Java的下一代IDE开发环境&am…

Java-2学习之Eclipse简介

源码编写的时候需要用编辑器&#xff0c;这里介绍下Eclipse。 1. 手动编译执行 在介绍之前&#xff0c;我们先手动执行一个java文件&#xff0c;了解下java编译执行的过程。 首先用笔记本工具编辑一个HelloJava.java文件&#xff0c;内容如下&#xff1a; public class Hel…

eclipse的使用简介

Java开发工具的之eclipse的使用 eclipse简介 接着上篇&#xff0c;进入到eclipse主界面之后&#xff0c;我们常用的视图包含下图所示的四部分&#xff1a; 注&#xff1a;当我们不小心将eclipse中的视图关闭后&#xff0c;想再次使用该视图时&#xff0c;可以单击eclipse菜单栏…

Eclipse简介和插件开发

Eclipse 是一个很让人着迷的开发环境&#xff0c;它提供的核心框架和可扩展的插件机制给广大的程序员提供了无限的想象和创造空间。目前网上流传相当丰富且全面的开发工具方面的插件&#xff0c;但是Eclipse已经超越了开发环境的概念&#xff0c;可以想象Eclipse将成为未来的集…

Eclipse 简介和插件开发示例 (IBM的文章)

Eclipse 是一个很让人着迷的开发环境&#xff0c;它提供的核心框架和可扩展的插件机制给广大的程序员提供了无限的想象和创造空间。目前网上流传相当丰富且全面的开发工具方面的插件&#xff0c;但是Eclipse已经超越了开发环境的概念&#xff0c;可以想象Eclipse将成为未来的集…

Eclipsej简介

Eclipse是著名的跨平台的自由集成开发环境(IDE)。最初主要用来Java语言开发,但是目前亦有人通过插件使其作为其他计算机语言比如C++和Python的开发工具。 Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多…

Eclipse简介、安装及常用快捷键

导航 我们为什么需要Eclipse&#xff1f;Eclipse简介与Eclipse基金会Eclipse下载安装1.下载2.安装2.1 安装JAVA EE插件 3.选择工作空间 Eclipse简单编辑与调试1.新建一个项目2.创建包Package3.创建类Class5.运行6.控制台7.调试8.Bug名称的由来 Eclipse安装插件Install New Soft…

Eclipse和MyEclipse简介

1.Eclipse 最初是由IBM公司开发的替代商业软件Visual Age for Java的下一代IDE开发环境&#xff0c;2001年11月贡献给开源社区&#xff0c;现在它由非营利软件供应商联盟Eclipse基金会管理。 Eclipse还包括插件开发环境&#xff08;Plug-in Decelopment Enviroment,PDE&#…

【Eclipse】--Eclipse简介和安装

工欲善其事必先利其器&#xff0c;作为堂堂的Java高级开发人员&#xff0c;对Eclipse的使用绝对不能是菜鸟级别的。不怕不知道&#xff0c;就怕不知道&#xff0c;有点时间&#xff0c;把Eclipse好好的了解一下。 Eclipse是什么&#xff1f; Eclipse是一种通用工具平台——普遍…

eclipse的简介安装与配置

eclipse概述 开发工具 记事本、加强记事本集成开发环境: 集成开发环境的分类: Eclipse、idea、Myeclipse Eclipse下载 www.eclipse.orgDownload---->download packags--->选择版本(最新版本)--->developers For javeEE --->windows 64bit ------>选择中国镜像…