数学建模——>LINGO基础

要求:协作、监督、宽容、模范、鼓励

在解决问题的框架结构上多下功夫——>思路清晰——>简洁明了——>言辞恰当、语言准确——>d多用图表

优化问题与LINGO实现

首先优化问题是什么:在一定条件下、寻求使目标最大(小)的决策是解决优化/决策问题的手段

优化问题的三要素:决策变量、目标函数、约束条件

数学建模——>LINGO基础_第1张图片

给定一个函数f(x)寻找x*使得f(x*) 最大最小,即Min(Max)f(x)其中x=(x_{1},x_{1},x_{2}...,x_{n})^{T}\in R^{n}

数学建模——>LINGO基础_第2张图片

LINGO是Linear Interactive and GeneralOptimizer的缩写,即“交互式的线性和通用优化求解器”。Lingo超强的优化计算能力在很多方面(线性规划、非线性规划、线性整数规划、非线性整数规划、非线性混合规划、二次规划等)比matlab、maple等强得多,Lingo编程简洁明了,数学模型不用做大的改动(或者不用改动)便可以直接采用Lingo语言编程,十分直观

Lingo模型由4个段构成:

(1)集合段(sets endsets);  (2)数据段(data  enddata);

(3)初始段(initendinit);   (4)目标与约束段。

Lingo的五大优点:

1. 对大规模数学规划,LINGO语言所建模型较简洁,语句不多;

2. 模型易于扩展,因为@FOR、@SUM等语句并没有指定循环或求和的上下限,如果在集合定义部分增加集合成员的个数,则循环或求和自然扩展,不需要改动目标函数和约束条件;

3. 数据初始化部分与其它部分语句分开,对同一模型用不同数据来计算时,只需改动数据部分即可,其它语句不变;

4.“集合”是LINGO有特色的概念,它把实际问题中的事物与数学变量及常量联系起来,是实际问题到数学量的抽象,它比C语言中的数组用途更为广泛。 

5.使用了集合以及@FOR、@SUM等集合操作函数以后可以用简洁的语句表达出常见的规划模型中的目标函数和约束条件,即使模型有大量决策变量和大量数据,组成模型的语句并不随之增加.

 在LINGO中的符号

连续优化:线性规划(LP)目标和约束均为线性函数                非线性规划(NLP)目标或约束中存在非线性函数                二次规划(QP)目标为二次函数、约束为线性

离散优化:整数规划(IP)决策变量(全部或部分)为整数                整数线性规划(ILP),整数非线性规划(INLP)                纯整数规划(PIP),混合整数规划(MIP)        一般整数规划,0-1(整数)规划

LINGO中的集:定义一个原始集——>setname/member_list/:attribute_list;

sets:   endsets        稠密集        稀疏集:1、显示罗列;1、设置成员过滤器

基础运算符:二元运算符(第五类)        取反 -        

函数类型(9种):

1、基础运算符:算数运算符、逻辑运算符、关系运算符

2、数学函数:三角函数和常规的数学函数

3、金融函数:两种金融函数

4、概率函数:大量概率相关的函数

5、变量界定函数:定义变量的取值范围

6、集操作函数:对集的运算提供帮助

7、集循环函数:遍历集的元素,执行一定的操作函数

8、数据输入输出函数:允许模型和外部数据源相联系

9、辅助函数:各种咋类函数

  逻辑运算符

#not# 否定该操作数的逻辑值,一元运算符

#eq# 若两个运算数相等,为1;否则为0

#ne#  若两个运算符不相等,为1;否则为0

#gt#  若左边运算符严格大于右边运算符,为1;否则为0

#ge# 若左边运算符大于或等于右边,为1;否则为0

#lt# 若左边运算符严格小于右边运算符,为1;否则为0

#le# 若左边运算符小于或等于右边运算符,为1;否则为0

#and# 仅当两个参数都为true时,结果为1;否则为0

#or#  仅当两个参数都为false时,结果为1;否则为0

运算符的优先级由高到低: 高  #not#     #eq#  #ne#  #gt#  #ge#  #lt#  #le# 低  #and#  #or#

数学函数

abs(x):返回x的绝对值

sin(x):    返回x的正弦值,x采用弧度制

cos(x):       返回x的余弦值

tan(x):        返回x的正切值

exp(x):        返回常数e的x次方

log(x):返回x的自然数

lgm(x):返回x的gamma函数的自然对数(即(x-1)!的自然对数

sign(x):如果x<0返回-1;否则,返回1

@floor(x):         返回x的整数部分。                                 x>=0时,返回不超过x的最大整数;                                 x<0时,返回不低于x的最大整数。

@smax(x1,x2,…,xn):返回x1,x2,…,xn中的最大值

@smin(x1,x2,…,xn):返回x1,x2,…,xn中的最小值

实现对变量取值范围的附加限制: @bin(x)             限制x为0或1 @bnd(L,x,U)    限制L≤x≤U @free(x)          取消对变量x的默认下界为0的限制,                           即x可取任意实数 @gin(x)             限制x为整数

集循环函数

1.@for 产生对集成员的约束。 基于建模语言的标量需要显式输入每个约束,但@for函数允许只输入一个约束,然后自动产生每个集成员的约束。

@sum 返回遍历指定的集成员的一个表达式的和。 例  求向量[5,1,3,4,6,10]前5个数的和。

 @ole函数       从EXCEL中引入或输出数据的接口函数,@OLE只能读一维或二维Ranges(在单个的EXCEL工作表(sheet)中),不能读间断的或三维Ranges。Ranges自左而右、自上而下来读

@if(logical_condition,true_result,false_result) 评价一个逻辑表达式logical_condition, 若为真,返回true_ result,否则返回false_result。

你可能感兴趣的:(matlab)