首页 > 其他分享 >Lingo学习(二)——线性规划基础、矩阵工厂

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

时间:2024-07-12 09:56:22浏览次数:18  
标签:约束条件 .. 线性规划 sum 矩阵 工厂 x1 Lingo

一、线性规划基础

(一)方法

① 一个线性规划中只含一个目标函数。(两个以上是多目标线性规划,Lingo无法直接解)

② 求目标函数的最大值或最小值分别用max = …或min = …来表示。

③ 以!开头,以;结束的语句是注释语句;

④ 线性规划和非线性规划的本质区别是目标函数是否线性,其余一致,故不需要区分。

但值得注意的是,非线性规划的求解十分困难,基本得不到全局最优解。  

(二)例题

某工厂有两条生产线,分别用来生产M和P两种型号的产品,利润分别为200元/个和300元/个,生产线的最大生产能力分别为每日100和120,生产线每生产一个M产品需要1个劳动日(1个工人工作8小时称为1个劳动日)进行调试、检测等工作,而每个P产品需要2个劳动日,该厂工人每天共计能提供160劳动日,假如原材料等其他条件不受限制,问应如何安排生产计划,才能使获得的利润最大?

(三)解

设两种产品的生产量分别为x1和x2,则该问题的数学模型为:

目标函数:max z=200x1+300x2 

约束条件为:

x1<=100

x2<=200

x1+2*x2<=160

xi>=0,  i=1,2 

(四)程序
max = 200*x1 + 300*x2;
x1 <= 100;  
x2 <= 120;
x1 + 2*x2 <= 160;

由Lingo信息可知,运行时间依旧0秒,目标值为29000,此时x1是100,x2是30。

二、矩阵工厂

(一)矩阵工厂:生产一维矩阵

先来看看例子,不必在意其中的空格(Lingo不读取空格):

sets:                  
factory /1..6/ : a,b;  
plant /1..3/ : x,y;    
endsets                

以上程序对应知识点:

① factory和plant都是制造矩阵的工厂,但它们是两家不同的工厂。

② factory工厂后面的 /1..6/ 说明它专门生产1*6的矩阵。

   factory工厂最后面出现的a和b,都是1*6的矩阵。

③ plant工厂后面的 /1..3/ 说明它专门生产1*3的矩阵。

    plant工厂最后面出现的x和y,都是1*3的矩阵。

④ 矩阵工厂的名字factory是随便起的,工厂所生产行矩阵的名字a和b也是随便起的。

⑤ 以上这四句话,本质是定义了四个行矩阵的大小,矩阵工厂只是中介。

⑥ 生产完矩阵后,工厂和矩阵之间将脱开联系。

⑦ Lingo不是一行一行读代码的,所以用sets:和endsets表示矩阵工厂生产流程的起止。

(二) 矩阵的赋值

矩阵工厂不能只生产矩阵,还要给矩阵赋初值才行,例子如下:

sets:                             
factory /1..6/ : a,b;             
plant /1..3/ : c,x;               
endsets                           
data:                             
a = 1, 2, 3, 4, 5, 6;             
b = 6.0, 5.0, 4.0, 3.0, 2.0, 1.0;
c = 10, 20, 30;                   
enddata                           

以上程序对应以下知识点:

① 不是每个矩阵都要赋值,有些矩阵正是我们要求解的变量。

② 需要赋值的矩阵必须赋满,不能给6个元素的矩阵只赋3个数值。

③ Lingo中可以给矩阵赋整数,也可以赋小数。

④ Lingo不是一行一行读代码的,所以用data:和enddata表示矩阵赋值的起止。

 (三) 循环与求和

【例】已知模型如下,请编程求解:

【for循环】

题中约束条件:i=1,2,…,5可以利用for循环一步到位。

   @for( gc(i) : a(i)*x(i) = S );

① for循环,括起整行语句,因为S=ai*xi,i=1,2,…,5,相当于5个约束条件;

② for循环内部,先写工厂,以告诉for循环几次,之后再上接约束条件。

③ 此处的i可带可不带,甚至可以换成j、k或m等等。

④ 二维矩阵工厂出现后,同时会出现i和j,那时必须带i和j。

【sum求和】

题中约束条件,可以利用sum求和一步到位。

 @sum( gc(i) : x(i) ) = 5000;

① sum求和,不可以括起完整的约束条件,因为一般的求和的结构是这样的: x1+x2+x3+x4+x5=5000

② sum求和内部,先写工厂,以告诉sum求和几次,之后再上接约束条件。

③ 此处的i可带可不带。

④ 二维矩阵工厂出现后,同时会出现i和j,那时必须带。

【for与sum出现的标志】

① 约束条件后面有i=1,2,…,5一定在最外层套上for。

② 约束条件前面是出现求和符号å,一定在中间加上sum。

  • 【例题】

【程序】
model:                         
sets:                          
gc /1..5/ : a,x;               
endsets                        
data:                          
a = 1,2,3,4,5;                 
enddata                        
max = S;                       
@for( gc(i) : a(i)*x(i) = S );
@sum( gc(i) : x(i) ) = 5000;   
end                            

PS:使用了矩阵工厂创建矩阵后,整个程序需用model:和end包起来。

标签:约束条件,..,线性规划,sum,矩阵,工厂,x1,Lingo
From: https://blog.csdn.net/loveabc123ABC/article/details/140360297

相关文章

  • Lingo学习(三)——工厂合并、运算符、内置函数
    一、工厂合并(一)工厂合并——生产二维矩阵【引入】sets:                                factory/1..6/:a;                  plant/1..8/:d;                    Cooperation(fact......
  • 输入一个正整数n (1≤ n ≤6),再输入一个n 行n列的矩阵,找出该矩阵中绝对值最大的元素
    /输入一个正整数n(1≤n≤6),再输入一个n行n列的矩阵,找出该矩阵中绝对值最大的元素以及它的行下标和列下标。/#include<stdio.h>voidfun(void){intn,i,j;intmax_val=0,max_row=0,max_col=0;printf("pleaseenternumber,1<=number<=6\n");......
  • 【数组、特殊矩阵的压缩存储】
    目录一、数组1.1、一维数组1.1.1、一维数组的定义方式1.1.2、一维数组的数组名1.2、二维数组1.2.1、二维数组的定义方式1.2.2、二维数组的数组名二、对称矩阵的压缩存储三、三角矩阵的压缩存储四、三对角矩阵的压缩存储五、稀疏矩阵的压缩存储一、数组概述:数组是......
  • 短视频平台搭建矩阵系统源码(搭建技术开发分享)
    #短视频矩阵#矩阵系统#矩阵源码搭建 技术自研框架开发背景:抖音账号矩阵系统是一种基于数据分析和管理的全新平台,能够帮助用户更好地管理、扩展和营销抖音账号,那矩阵的顾名思义就是可以批量话的制作和生成,来完成自己的需求和任务。//视频批量剪辑模式    $video......
  • 矩阵系统被平台限制后的重大更新
    #矩阵系统#矩阵OEM#矩阵源码 矩阵系统,一个强大的工具,我们可以用它来解决各种问题。在数据分析、人工智能和机器学习等领域,矩阵系统发挥着重要的作用。通过它,我们可以获得强大的计算能力和数据处理能力,让我们的工作更加高效和准确。"在这个例子中,我们主要做了以下几件事:......
  • 矩阵系统有什么优点?
    #矩阵贴牌#矩阵系统#矩阵源码矩阵系统有许多优点,主要包括:&nbsp;1.更高的灵活性:矩阵系统通常更具灵活性,可以适应不断变化的环境和需求。&nbsp;2.更高的生产力:矩阵系统通常采用先进的软件和硬件技术,可以更高效地处理数据和信息,从而提高生产力。&nbsp;3.更好的协作:矩阵系......
  • Lingo学习(一)——基本界面、解方程、变量
    一、Lingo基本界面【步骤】1.双击打开Lingo2.弹出一个对话框,点击Cancel左边的NeverRegister即可,其余内容用不到。3:界面自动弹出名为“LingoModel–Lingo1”的窗口,用于书写代码。4:以解方程的题目:x+1=2为例,写完代码后,点击“红色的靶心”运行程序。5:首......
  • Franka Robot 齐次变换矩阵 robot_state.O_T_EE
    O_T_EE 是一个4x4的齐次变换矩阵,用于描述末端执行器在机器人基座坐标系下的位置和姿态。这个矩阵的结构如下:[r11r12r13tx][r21r22r23ty][r31r32r33tz][0001]其中:r11到r33表示末端执行器的旋转矩阵tx、ty、tz表示末端执行器在机器人基座坐标系......
  • 小红书矩阵引流训练营:0到1玩转小红书流量,在小红书上分得一杯羹
    小红书流量增长策略与技术实践指南摘要:本技术文献旨在深入探讨小红书平台的流量增长策略,包括免费矩阵引流、矩阵截流及付费投放等多种玩法,旨在帮助个人、团队及公司从零开始,有效掌握并优化小红书流量获取技巧,实现品牌曝光与用户增长。通过系统化的课程设计与实战案例分析,本......
  • 第三章 MATLAB矩阵的操作的目录【向量元素的引用】
    向量元素的引用有两种:(1)提取向量中的单个元素(2)提取向量中的多个元素可以利用向量中包含的元素个数来描述一个向量的大小。在MATLAB中,使用length函数或numel函数来计算向量中包含的元素个数。向量的元素a1a2a3......an索引(下标)123n在MATLAB中,向量......