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.mzph.cn/bicheng/45288.shtml

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

相关文章

【YOLOv8】 用YOLOv8实现数字式工业仪表智能读数(三)

上一篇圆形表盘指针式仪表的项目受到很多人的关注&#xff0c;咱们一鼓作气&#xff0c;把数字式工业仪表的智能读数也研究一下。本篇主要讲如何用YOLOV8实现数字式工业仪表的自动读数&#xff0c;并将读数结果进行输出&#xff0c;若需要完整数据集和源代码可以私信。 目录 &a…

网络安全应急响应信息收集利器-Eagle_Eye

项目介绍: 网络安全应急响应信息收集利器 - Eagle_Eye&#xff1a;您的终端信息自动收集专家 在网络安全的紧急时刻&#xff0c;每一秒都至关重要。Eagle_Eye&#xff0c;这款专为应急响应设计的工具&#xff0c;如同一位随时待命的侦察兵&#xff0c;能够在危机时刻迅速收集…

嵌入式工程师从0开始,到底该学什么,怎么学?

作为嵌入式工程师&#xff0c;从零开始学习需要掌握以下几个关键方面。我收集归类了一份嵌入式学习包&#xff0c;对于新手而言简直不要太棒&#xff0c;里面包括了新手各个时期的学习方向编程教学、问题视频讲解、毕设800套和语言类教学&#xff0c;敲个22就可以免费获得。 基…

yarn底层原理详解:(第33天)

系列文章目录 一、yarn总体架构 二、yarn核心组件及功能 三、yarn资源分配与调度 四、yarn提交和执行流程 五、yarn调度算法 六、yarn安全性与容错性 文章目录 系列文章目录前言一、总体架构二、核心组件及功能1. ResourceManager&#xff08;RM&#xff09;2. NodeManager&am…

day29--452. 用最少数量的箭引爆气球+435. 无重叠区间+763.划分字母区间

一、452. 用最少数量的箭引爆气球 题目链接&#xff1a;https://leetcode.cn/problems/minimum-number-of-arrows-to-burst-balloons/ 文章讲解&#xff1a;https://programmercarl.com/0452.%E7%94%A8%E6%9C%80%E5%B0%91%E6%95%B0%E9%87%8F%E7%9A%84%E7%AE%AD%E5%BC%95%E7%88…

整数的英语表示

题目链接 整数的英语表示 题目描述 注意点 0 < num < 2^31 - 1 解答思路 每三个数字形成一组&#xff08;高位不足的部分可以用0填充&#xff09;&#xff0c;使用StringBuilder拼接每组的数字和单位关键是三个数字的英语表示&#xff0c;包含个位、十位、百位&…

C++ | Leetcode C++题解之第229题多数元素II

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> majorityElement(vector<int>& nums) {int n nums.size();vector<int> ans;unordered_map<int, int> cnt;for (auto & v : nums) {cnt[v];}for (auto & v : cnt…

搭建ELK+Filebead+zookeeper+kafka实验

目录 1.部署 Filebeat 2. Logstash配置 3.浏览器kibana访问验证 主机名ip地址主要软件es01192.168.9.114ElasticSearches02192.168.9.115ElasticSearches03192.168.9.116ElasticSearch、Kibananginx01192.168.9.113nginx、LogstashNA192.168.9.111nginx、FilebeatNA192.168…

YOLOv8改进 | 注意力机制| 对小目标友好的BiFormer【CVPR2023】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效…

告别中央服务器:Syncthing实现点对点文件同步

介绍 Syncthing 是一款开源的文件同步工具&#xff0c;可让您在多个设备之间同步文件。 它适用于 Mac OS X、Windows、Linux、FreeBSD、Solaris、OpenBSD等系统。 可以通过浏览器访问来配置和监控该应用程序。 Syncthing 具有以下特点: 1、点对点同步 2、无需中央服务器 …

推三返一,七星创客模式激活消费与分享热情

七星创客模式&#xff0c;作为一种创新的消费与营销融合策略&#xff0c;正悄然改变着传统商业生态的运作方式。其核心精髓“先消费后返利”&#xff0c;不仅颠覆了消费者的传统购物体验&#xff0c;还巧妙地在促进消费与激励分享之间搭建起了一座桥梁。这一模式通过随机返佣的…

【CT】LeetCode手撕—8. 字符串转换整数 (atoi)

目录 题目1- 思路2- 实现⭐8. 字符串转换整数 (atoi)——题解思路 3- ACM 实现 题目 原题连接&#xff1a;8. 字符串转换整数 (atoi) 1- 思路 思路 x 的平方根 ——> 利用二分 ——> 二分的 check条件为 k^2 < x 2- 实现 ⭐8. 字符串转换整数 (atoi)——题解思路 …

C++ enum class转常量

当使用 enum class 时&#xff0c;它具有更强的类型安全性和隔离性&#xff0c;因此需要显式转换才能访问其底层整数值。 std::underlying_type_t 是一个类型别名&#xff0c;它返回枚举类型的底层类型。 to_underlying 函数提供了一种方便的方式来执行这种转换&#xff0c;特别…

LLM——langchain 与阿里 DashScop (通义千问大模型) 和 DashVector(向量数据库) 结合使用总结

文章目录 前言预览直接调用大模型使用 prompt template格式化输出使用上下文 RAG 增强检索 自定义 langchain AgentPromptTemplate 和 ChatPromptTemplate使用少量示例创建ChatPromptTemplate 前言 langchain 是一个面向大模型开发的框架&#xff0c;其中封装了很多核心组件&a…

Java数据结构-链表与LinkedList

链表 链表的概念 链表是一种物理存储结构上非连续的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的引用链接次序实现的。 通俗来说&#xff0c;相比较于顺序表&#xff08;物理上连续&#xff0c;逻辑上也连续&#xff09;&#xff0c;链表物理上不一定连续。 链表是…

代码随想录算法训练营第三十一天|动态规划:01背包理论基础、01背包理论基础(滚动数组)

动态规划&#xff1a;01背包理论基础 1. dp[i][j]: 表示0到i个物品放入容量为j的背包中&#xff0c;价值总和最大是多少 2. dp[i][j]的状态取决于&#xff0c;第i个物品要不要放入这个背包。 不放物品i&#xff1a;dp[i-1][j] (其实就是当物品i的重量大于背包j的重量时&…

2023年全国大学生电子信息竞赛E题——自动追踪系统(stm32和openmv+普通舵机)完美解决第四问

当时做的时候&#xff0c;当时看别人开源的23年的题&#xff0c;感觉一头雾水。两个字没思路。确实只有做了才会有思路。我这里清晰的整理出来思路。 1.第一问的复位问题就是写一个函数&#xff0c;如果按键按下&#xff0c;就进入&#xff0c;再按下就退出 当然这个复位是写死…

自学鸿蒙HarmonyOS的ArkTS语言<六>警告弹窗AlertDialog和列表选择弹窗ActionSheet

一、警告弹窗 ... Button(点击我可以获取一个警告弹窗).onClick(() > {AlertDialog.show({title: 我是弹窗标题,subtitle: 我是副标题,message: 我是弹窗内容,autoCancel: true, // 点击遮罩层是否关闭alignment: DialogAlignment.Center, // 弹窗位置offset: { dx: 0, dy:…

【ARMv8/v9 GIC 系列 5.8 -- SPI 中断路由到指定的 core 详细介绍】

请阅读【ARM GICv3/v4 实战学习 】 文章目录 SPI 中断路由配置寄存器字段代码示例Usage scenarioSPI 中断路由配置 在ARMv8和ARMv9架构下,当启用亲和性路由(Affinity Routing)时,系统寄存器GICD_IROUTER<n>用于提供具有INTID n的SPI的路由信息。n的最大值由公式(32*…

GAN生成对抗网络

GAN生成对抗网络 GANStable Diffusion GAN生成对抗网络子啊2015年横空出世&#xff0c;在当时掀起了巨大轰动&#xff0c;很多人预研它将开创一个全新的学习范式&#xff0c;当时有一个很流行的说法&#xff1a;样本不够&#xff0c;GAN来凑。现如今&#xff0c;大模型当道&…