Lingo学习(三)——工厂合并、运算符、内置函数

一、工厂合并

(一) 工厂合并——生产二维矩阵

【引入】

sets:                                 
factory /1..6/ : a;                   
plant /1..8/ : d;                     
Cooperation(factory,p lant) : c, x;   
endsets     

以上程序可以得到以下结论:

  1.  Cooperation大工厂是由factory和plant两家小工厂合并而办,可生产6*8的矩阵。
  2.  a是1*6的矩阵,d1*8的矩阵,c和x都是6*8的矩阵。
  3.  如果将Cooperation(factory,p lant)中的factory与plant调换位置,则生产8*6的矩阵。
  4.  工厂合并的名字Cooperation是随便起的,矩阵的名字c和x也是随便起的。

(二)矩阵的赋值

【引入】
data:               
c=6,2,6,7,4,2,5,8   4,9,5,3,8,5,8,2   5,2,1,9,7,4,3,3   7,6,7,3,9,2,7,1   2,3,9,5,7,2,6,5   5,5,2,2,8,1,4,3;  
enddata             
【例题】

【程序】
model:                                                     
sets:                                                     
factory /1..6/ : a;                                        
plant /1..8/ : d;                                          
Cooperation(factory,p lant) : c, x;                        
endsets        
data:                                                      
a=60,55,5 1,43,41,52;                                      
d=35,37,22,32,41,32,43,38;                                 
c=6,2,6,7,4,2,5,8                                          4,9,5,3,8,5,8,2                                          5,2,1,9,7,4,3,3                                          7,6,7,3,9,2,7,1                                          2,3,9,5,7,2,6,5                                          5,5,2,2,8,1,4,3;                                         
enddata                                                    
min = @sum( Cooperation(i,j) : c(i,j)*x(i,j) );            
@for( factory(i): @sum(plant(j):x(i,j)) <= a(i) );         
@for( plant(j): @sum(factory(i):x(i,j)) = d(j) );          
end     

 二、运算符

(一) 算术运算符

【例】若x=2,求解的数值。

x = 2;
y = 3*x^10 + 6/(15-x^(1/2));

(二)关系运算符

① 关系运算符往往用在约束条件中,用来指定约束条件左右两边必须满足的关系。

② Lingo只有三种关系运算符:“=”、“>=”以及“<=”。

   没有单独的“>”和“<”,若出现,Lingo则视为省略了“=”。

   若想严格表达A大于B,可以用以下方式:

B = 10;
e = 0.0001;
A - e > B;

(三)逻辑运算符 

【定义】

分类

运算符    理解             作用

两个数字之间

# eq #    equal            两个运算对象相等为真

# ne #    not equal        两个运算对象不相等为真

# gt #    greater than     左边大于右边为真

# ge #    greater equal    左边大于等于右边为

# lt #    less than        左边小于右边为真

# le #    less equal       左边小于等于右边为真

两个逻辑表达式之间

# not #   非门             单目运算符,表示取反

# and #   与门             左右两边均正确才为真

# or #    或门             左右两边均错误才为假

【唯一出现的位置】

   a)  for循环与sum求和。

   b)  if判断中。

【例1】

若矩阵a=[6,5,4,3,2,1],用集合的语言求解a(5)+a(6)。

model:                                 
sets:                                 
factory / 1..6 / : a;                  
endsets                                
data:                                  
a = 6,5,4,3,2,1;                        
enddata                                 
y = @sum( factory(i) | i#ge#5 : a(i) );
end        

 上式中,i#ge#5对sum求和的范围进行了限制,当然也可以写i#gt#4。

【例2】

若矩阵a由六个元素组成,且a(i)>5,i=1,2,5,6。求矩阵a各元素求和的最小值。

model:                                              
sets:                                               
factory / 1..6 / : a;                               
endsets                                             
min = @sum(factory : a);                            
@for( factory(i) | i#lt#3 #or# i#ge#5 : a(i)>5 );   
end  

三、Lingo内置函数

(一)if判断

【例1】

① Lingo默认所有变量不为负数,故应先进行定义域自由化。

② if函数语法简单,看一眼即可学会。

@free(x);
@free(y);  
x = -10;  ! 给x一个随机的初值
y = @if( x#ge#0 , x+10 , x-10 );
【例2】

① 0<=x<=500可以x#ge#0 #and# x#le#500,也可以直接x#le#500。

② if函数的嵌套功能:

x = 1500;   ! 给x一个随机的初值
y = @if( x#le#500 ,4*x , @if( x#gt#1000 , 1 500+2*x , 500+3*x ));
【提示】

① if函数通常仅仅在分段函数处出现,一般其出现频率、使用次数十分之低。

② Lingo中的if函数,必须自带一个else。

(二) 变量定界函数

函数

作用

@bin(x)

@gin(x)

@bnd(a,x,b)

@free(x)

限制x只能取0或1,可用于0−1规划

限制x为整数,在整数规划中特别有用

限制a x b,推荐直接替换两个约束条件

取消对变量x非负的限制,使其定义域自由

【@free】

求函数 z=(x+2)^2 +(y−2)^2的最小值。

@free(x);                
@free(y);                
min = (x+2)^2 + (y-2)^2;
【@bnd

求函数y=2x在(1,3)之间的最大值。

@bnd(1,x,3);
max = 2*x;   
【@bin

已知a=[2,9,3,8,10,6,4,10以及b=1,3,4,3,3,1,5,10,求以下线性规划:    

                     

model:                      
sets:                       
factory / 1..8 / : a,b,x;   
endsets                     
data:                       
a = 2,9,3,8,10,6,4,10;      
b = 1,3,4,3,3,1,5,10;       
enddata                     
max = @sum(factory : a*x );
@sum(factory : b*x ) < 15;  
@for( factory : @bin(x) );  
end 
【@gin】

已知a=[2.1 1.0 1.8 1.2 2.0 1.2]以及b=[6 125 12500 345 5],求整数规划:

model:                                                   
sets:                                                    
factory / 1..6 / : a,x;                                   
plant / 1..5 / :b;                                         
coo(factory,p lant) : c;                                   
endsets                                                    
data:                                                      
a=2.1 1.0 1.8 1.2 2.0 1.2;                                 
b=6 125 12500 345 5;                                       
c=0.45 20 41 5 22 0.3                                      0.45 28 4065 5 0.35                                      0.65 40 850 43 0.6                                     0.4 25 75 27 0.2   0.5 26 76 48 0.4                                         0.5 75 235 8 0.6;                                        
enddata                                                    
max = @sum( factory : a*x );                               
@for( p lant(j) : @sum(factory(i):c(i,j)*x(i)) <= b(j) );  
@sum( factory : x )=14;                                    
x(2)<=3;                                                   
x(4)<=2;                                                   
@for( factory(i) | i#ne#2 #and# i#ne#4 : @bnd(1,x(i),4)  );
@for( factory : @gin(x) );                                 
end     

(三) 数学函数

类别

函数名       返回值

三角函数

@sin(x)      返回x的正弦值

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

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

指数对数

@log(x)    返回x的自然对数值,其他底数用换底公式

@exp(x)    返回xe的值,因e的数值无法敲入而诞生

其它

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

@sigh(x)   返回x的符号值,x³0为1,x<0为−1

@floor(x)  返回x的整数部分,向靠近0的方向取整

比较大小

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

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

【例1】

求解sin( 3.14159) +log^1024_2 +|−10| +e^0

y = @sin(3.14159) + @log(1024) / @log(2) + @abs(-10) + @exp(0);

(四)集合操作函数

设factoty工厂生产6个元素的矩阵:

类别

函数名                  作用

熟人

@for( factory : a>0 )   循环

@sum( factory : a )     求和

有用

@prod( factory : a )    求积

@max( factory : a )     求最大值

@min( factory : a )     求最小值

鸡肋

@in( factory , c )      判断常数c是否在集合中

@size( factory )        返回工厂可生产矩阵的长度

【例1】
model:                       
sets:                        
factory / 1..6 / : a;        
endsets                      
data:                        
a = 6,5,4,3,2,1;             
enddata                      
prod = @prod(factory : a);   
greater = @max(factory : a);
less = @min(factory : a);    
in = @in(factory,5);         
size = @size(factory);       
end                

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu编译PX4固件

目录 前言 准备编译参考 前言 要想自己编译PX4固件需要交叉编译器&#xff0c;交叉编译器可以将 x86架构 平台上写好程序编译出来&#xff0c;而编译出来的可执行文件是能用到 arm架构 的平台上。 本次编译是以 px4 v1.13.2 为例。 我的配置如下&#xff1a; 虚拟机 Ubuntu 18…

按下快门前的算法——对焦

对焦算法可以分为测距式&#xff0c;相位式&#xff0c;反差式。 其中测距式是通过激光&#xff0c;&#xff08;TOF&#xff0c;Time of Flight&#xff09;等主动式地得知物距&#xff0c;然后对焦。更常用的是后两者。 反差式CDAF&#xff08;Contrast Detection Auto Foc…

设计模式7-装饰模式

设计模式7-装饰模式 写在前面动机模式定义结构代码推导原始代码解决问题分析 选择装饰模式的理由1. 职责分离&#xff08;Single Responsibility Principle&#xff09;2. 动态扩展功能3. 避免类爆炸4. 开闭原则&#xff08;Open/Closed Principle&#xff09;5. 更好的组合复用…

Vulkan入门系列0- Vulkan与OpenGL的区别

一:概述 Vulkan 是新一代图形和计算API,是由科纳斯组织(Khronos Group)维护的一套跨平台的、开放标准的、现代GPU 的编程接口,它仅仅是规定了一套编程接口,并没有接口的具体实现,实现是由硬件厂商适配实现的,市面上像NVIDIA、AMD和Intel等国际大厂基本提供了完整的…

一天20MW!天途推出无人机全自主光伏巡检平台

01 光伏电站的运维挑战 光伏发电为人类提供了可持续的清洁能源供给。一般集中式电站建设在空旷的地区&#xff0c;如荒地、沙漠等地区&#xff1b;分布式电站建设在用户的屋顶和建筑物表面&#xff0c;如住宅、商业建筑、工业厂房等地区。 随着光伏电站的大规模的使用&#x…

流程图编辑框架LogicFlow-vue-ts和js

LogicFlow官网https://site.logic-flow.cn/LogicFlow 是一款流程图编辑框架&#xff0c;提供了一系列流程图交互、编辑所必需的功能和灵活的节点自定义、插件等拓展机制。LogicFlow支持前端研发自定义开发各种逻辑编排场景&#xff0c;如流程图、ER图、BPMN流程等。在工作审批配…

WebDriver与浏览器通信的深度剖析与探索

在自动化测试的世界里&#xff0c;WebDriver无疑是连接测试脚本与浏览器之间的桥梁&#xff0c;它让复杂的自动化测试成为可能。本文将深入探讨WebDriver与浏览器之间的通信机制&#xff0c;揭示它们之间如何协同工作&#xff0c;以及这一过程中涉及的关键技术和挑战。 一、We…

Lingo学习(二)——线性规划基础、矩阵工厂

一、线性规划基础 &#xff08;一&#xff09;方法 ① 一个线性规划中只含一个目标函数。(两个以上是多目标线性规划,Lingo无法直接解) ② 求目标函数的最大值或最小值分别用max …或min …来表示。 ③ 以!开头,以;结束的语句是注释语句; ④ 线性规划和非线性规划的本质…

分布式应用系统设计:即时消息系统

即时消息(IM)系统&#xff0c;涉及&#xff1a;站内消息系统 组件如下&#xff1b; 客户端&#xff1a; WEB页面&#xff0c;IM桌面客户端。通过WebSocket 跟ChatService后端服务连接 Chat Service&#xff1a; 提供WebSocket接口&#xff0c;并保持跟“客户端”状态的维护。…

独立开发者系列(23)——Linux掌握小结

只要开发系统&#xff0c;就绕不开使用Linux服务器 &#xff0c;而Linux除了使用BT面板进行初级管理&#xff0c;很多稍微高级点的管理&#xff0c;还是需要命令行进行的。这里总结在不需要精通的情况下&#xff0c;掌握常见命令和环境的相关配置。 &#xff08;1&#xff09…

MyBatis框架学习笔记(三):MyBatis重要文件详解:配置文件与映射文件

1 mybatis-config.xml-配置文件详解 1.1 说明 &#xff08;1&#xff09;mybatis 的核心配置文件(mybatis-config.xml)&#xff0c;比如配置 jdbc 连接信息&#xff0c;注册 mapper 等等都是在这个文件中进行配置,我们需要对这个配置文件有详细的了解 &#xff08;2&#x…

LabVIEW滤波器性能研究

为了研究滤波器的滤波性能&#xff0c;采用LabVIEW设计了一套滤波器性能研究系统。该系统通过LabVIEW中的波形生成函数&#xff0c;输出幅值及频率可调的正弦波和白噪声两种信号&#xff0c;并将白噪声与正弦波叠加&#xff0c;再通过滤波器输出纯净的正弦波信号。系统通过FFT&…

git仓库使用

一、没有仓库 首先要有gitee账号 创建仓库 有了仓库就按已有仓库进行操作 二、已有仓库 先让仓库负责人把自己拉进仓库 成为开发者或者管理员 git clone 仓库地址 开始工作 git add . git commit -m “ 提交说明” git pull 更新一下也叫同步 将线上代码更新到本地 git pu…

Golang | Leetcode Golang题解之第230题二叉搜索树中第K小的元素

题目&#xff1a; 题解&#xff1a; type MyBst struct {root *TreeNodenodeNum map[*TreeNode]int // 统计以每个结点为根结点的子树的结点数&#xff0c;并存储在哈希表中 }// 统计以 node 为根结点的子树的结点数 func (t *MyBst) countNodeNum(node *TreeNode) int {if…

JAVA之Scanner类的使用

一、Scanner类的介绍 java语言中的Scanner类可以实现从键盘输入内容的操作。通常我们使用该类完成一些用户信息的采集&#xff0c;通过java中的变量保存这些信息。 二、Scanner类的使用 1.使用步骤 a&#xff09;导包&#xff1a;import java.util.Scanner; b&#xff09;创…

2024年西安铁一中集训DAY1---- 杂题选讲

文章目录 牛客练习赛125 E 联谊活动&#xff08;枚举&#xff0c;分讨&#xff09;牛客练习赛125 F 玻璃弹珠&#xff08;类莫队&#xff0c;离线询问&#xff0c;数据结构&#xff09;2024ccpc长春邀请赛 D Parallel Lines&#xff08;随机化&#xff09;2024ccpc长春邀请赛 E…

昇思25天学习打卡营第14天|基于MindSpore的红酒分类实验

背景介绍 本文主要介绍使用MindSpore在部分wine数据集上进行KNN实验。 K近邻算法原理 K近邻算法&#xff08;K-Nearest-Neighbor, KNN&#xff09;是一种用于分类和回归的非参数统计方法&#xff0c;最初由 Cover和Hart于1968年提出(Cover等人,1967)&#xff0c;是机器学习最…

了解AsyncRotationController

概述 基于android 15.0, 以从强制横屏App上滑退回桌面流程来分析 frameworks/base/services/core/java/com/android/server/wm/AsyncRotationController.javaAsyncRotationController 是一种控制器&#xff0c;用于处理设备显示屏旋转时非活动窗口的异步更新。这种控制器通过…

国产化框架PaddleClas结合Swanlab进行杂草分类

1. 项目介绍 杂草是农业中的主要问题之一&#xff0c;对作物生长和产量造成严重威胁。传统的手动识别和管理方式效率低下且不够精确&#xff0c;因此需要借助先进的计算机视觉技术来提升农业生产的效率和质量。ResNet作为一种深度学习模型&#xff0c;在处理复杂的图像分类任务…

C++入门基础篇(1)

欢迎大家来到海盗猫鸥的博客—— 断更许久&#xff0c;让我们继续好好学习吧&#xff01; 目录 1.namespace命名空间 命名空间的存在价值&#xff1a; 命名空间的定义&#xff1a; 命名空间的使用&#xff1a; 2.C输入输出函数 使用&#xff1a; 3.缺省参数 4.函数重载…