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

news2024/9/25 17:16:11

一、工厂合并

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

【引入】

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.coloradmin.cn/o/1920453.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Go语言入门之Map详解

Go语言入门之Map详解 1.基础定义 map是一个无序的&#xff0c;k-v键值对格式的集合 &#xff08;1&#xff09;特点 类型特点&#xff1a;map为引用类型&#xff0c;所以在函数中更新value值会永久改变顺序特点&#xff1a;map的遍历是无序的&#xff0c;因为底层是哈希表&am…

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

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

微调及代码

一、微调&#xff1a;迁移学习&#xff08;transfer learning&#xff09;将从源数据集学到的知识迁移到目标数据集。 二、步骤 1、在源数据集&#xff08;例如ImageNet数据集&#xff09;上预训练神经网络模型&#xff0c;即源模型。 2、创建一个新的神经网络模型&#xff…

【Python实战因果推断】31_双重差分2

目录 Canonical Difference-in-Differences Diff-in-Diff with Outcome Growth Canonical Difference-in-Differences 差分法的基本思想是&#xff0c;通过使用受治疗单位的基线&#xff0c;但应用对照单位的结果&#xff08;增长&#xff09;演变&#xff0c;来估算缺失的潜…

PostgreSQL 中如何处理数据的批量更新和事务日志管理?

文章目录 PostgreSQL 中数据的批量更新和事务日志管理 PostgreSQL 中数据的批量更新和事务日志管理 在数据库的世界里&#xff0c;数据的批量更新和事务日志管理就像是一场精心编排的舞蹈&#xff0c;需要精准的步伐和协调的动作。对于 PostgreSQL 而言&#xff0c;这两个方面…

LLM基础模型系列:Fine-Tuning总览

由于对大型语言模型&#xff0c;人工智能从业者经常被问到这样的问题&#xff1a;如何训练自己的数据&#xff1f;回答这个问题远非易事。生成式人工智能的最新进展是由具有许多参数的大规模模型驱动的&#xff0c;而训练这样的模型LLM需要昂贵的硬件&#xff08;即许多具有大量…

常见 Web漏洞分析与防范研究

前言&#xff1a; 在当今数字化时代&#xff0c;Web应用程序扮演着重要的角色&#xff0c;为我们提供了各种在线服务和功能。然而&#xff0c;这些应用程序往往面临着各种潜在的安全威胁&#xff0c;这些威胁可能会导致敏感信息泄露、系统瘫痪以及其他不良后果。 SQL注入漏洞 …

自主研发接口测试框架

测试任务&#xff1a;将以前完成的所有的脚本统一改写为unitest框架方式 1、需求原型 1.1 框架目录结构 V1.0&#xff1a;一般的设计思路分为配置层、脚本层、数据层、结果层&#xff0c;如下图所示 V 2.0&#xff1a;加入驱动层testdriver 1.2 框架各层需要完成的工作 1、配…

【CT】LeetCode手撕—70. 爬楼梯

目录 题目1- 思路2- 实现⭐70. 爬楼梯——题解思路 3- ACM实现 题目 原题连接&#xff1a;70. 爬楼梯 1- 思路 思路 爬楼梯 ——> 动规五部曲 2- 实现 ⭐70. 爬楼梯——题解思路 class Solution {public int climbStairs(int n) {if(n<1){return 1;}// 1. 定义 dp 数…

html5——CSS基础选择器

目录 标签选择器 类选择器 id选择器 三种选择器优先级 标签指定式选择器 包含选择器 群组选择器 通配符选择器 Emmet语法&#xff08;扩展补充&#xff09; 标签选择器 HTML标签作为标签选择器的名称&#xff1a; <h1>…<h6>、<p>、<img/> 语…

数据平滑处理(部分)

一、 移动平均&#xff08;Moving Average&#xff09; 是一种最简单的数据平滑方法&#xff0c;用于平滑时间序列数据。它通过计算一定窗口内数据点的平均值来减少噪音&#xff0c;同时保留数据的趋势。移动平均包括简单移动平均&#xff08;SMA&#xff09;或指数加权移动平均…

初始网络知识

前言&#x1f440;~ 上一章我们介绍了使用java代码操作文件&#xff0c;今天我们来聊聊网络的一些基础知识点&#xff0c;以便后续更深入的了解网络 网络 局域网&#xff08;LAN&#xff09; 广域网&#xff08;WAN&#xff09; 路由器 交换机 网络通信基础 IP地址 端…

可观察性优势:掌握当代编程技术

反馈循环是我们开发人员工作的关键。它们为我们提供信息&#xff0c;并让我们从用户过去和现在的行为中学习。这意味着我们可以根据过去的反应进行主动开发。 TestComplete 是一款自动化UI测试工具&#xff0c;这款工具目前在全球范围内被广泛应用于进行桌面、移动和Web应用的…

“闭门造车”之多模态思路浅谈:自回归学习与生成

©PaperWeekly 原创 作者 | 苏剑林 单位 | 科学空间 研究方向 | NLP、神经网络 这篇文章我们继续来闭门造车&#xff0c;分享一下笔者最近对多模态学习的一些新理解。 在前文《“闭门造车”之多模态思路浅谈&#xff1a;无损》中&#xff0c;我们强调了无损输入对于理想的…

压缩文件的解析方式

我们常用的压缩文件有两种&#xff1a;后缀为.zip或者.rar&#xff0c;接下来将介绍解析两种压缩文件的代码。需要用到三个jar包&#xff1a;commons-io-2.16.1.jar、junrar-7.5.5.jar、slf4j-api-2.0.13.jar&#xff0c;可以在官网下载&#xff0c;也可以发私信。 这段代码是一…

2.GAP:通用访问协议

GAP的简单理解 GAP这个名字&#xff0c;直接翻译过来不好理解。 简单点可以理解为&#xff1a; 这是蓝牙设备在互联之前&#xff0c;过程中&#xff0c;第一个用于交流的协议。在代码上&#xff0c;会给这个协议实现&#xff0c;连接参数的设置&#xff0c;连接事件的实现&am…

【算法】二叉树-迭代法实现前后中序遍历

递归的实现就是:每一次递归调用都会把函数的局部变量&#xff0c;参数值和返回地址等压入调用栈中&#xff0c;然后递归返回的时候&#xff0c;从栈顶弹出上一次递归的各项参数&#xff0c;这就是递归为什么可以返回上一层位置的原因 可以用栈实现二叉树的前中后序遍历 1. 前序…

【数学趣】拉窗帘模型之求面积引发的6个解法

抖音上推了一个趣题 题 求橙色部分的面积 蓝色部分是2个正方形。大的正方形边长为6。&#xff08;小的正方形一半被一个黄色三角形遮住了一半&#xff09; 答案 18 解法1&#xff1a;拉窗帘 先写一个代号&#xff0c;方便证明&#xff0c;H G 代表正方形。&#xff08;G…

AV1 编码标准中帧内预测技术详细说明

AV1 编码标准帧内预测 AV1&#xff08;AOMedia Video 1&#xff09;是一种开源的视频编码格式&#xff0c;旨在提供比现有标准更高的压缩效率和更好的视频质量。在帧内预测方面&#xff0c;AV1相较于其前身VP9和其他编解码标准&#xff0c;如H.264/AVC和H.265/HEVC&#xff0c;…

暑假第一次作业

第一步&#xff1a;给R1,R2,R3,R4配IP [R1-GigabitEthernet0/0/0]ip address 192.168.1.1 24 [R1-Serial4/0/0]ip address 15.0.0.1 24 [R2-GigabitEthernet0/0/0]ip address 192.168.2.1 24 [R2-Serial4/0/0]ip address 25.0.0.1 24 [R3-GigabitEthernet0/0/0]ip address 192.…