数建--LINGO软件介绍

LINGO软件介绍

一、LINGO 基本操作

  • LINGO初印象

    • LINGO 窗口 数建--LINGO软件介绍_第1张图片

    • LINGO 工具栏数建--LINGO软件介绍_第2张图片

    • LINGO模型文件数建--LINGO软件介绍_第3张图片

  • LINGO的运算符

    • 算术运算符: 用于数与数之间的数学运算 (前三个无前面的/)
      • /+
      • /-
      • /*
      • /
      • ^ (求幂)
    • 关系运算符: 表示 “ 数与数之间” 的大小关系。
      • < (<=)
      • =
      • 大于 (>=)
  • 简单程序编写

    -数建--LINGO软件介绍_第4张图片

    • 程序

      model :
      title 求解线性规划
      max = 2 * x1 + 3 * x2;
      2*x1 + x2 < 8;
      4 * x1 + 3 * x2 < 15;
      end
      
    • 数建--LINGO软件介绍_第5张图片

    • 数建--LINGO软件介绍_第6张图片

  • 例题:数建--LINGO软件介绍_第7张图片

    • 程序
    Model:
    Title:求解二次规划
    !小程序可用,大程序不提倡
    [opt] max = 98 * x1 + 277 * x2 - x1 ^ 2 - 0.3*x1*x2 - 2 * x2 ^ 2;
    [st1] x1 + x2 < 100;
    [st2] x1 < 2 * x2;
    @gin(x1);@gin(x2);
    end
    
    • 数建--LINGO软件介绍_第8张图片

    • 数建--LINGO软件介绍_第9张图片

    • 数建--LINGO软件介绍_第10张图片

二、一维数组型变量

  • 段的概述: LINGO中建立的优化模型可以由六个部分组成,或称六“段”。

    • 集合段: 用于定义数组型性变量 SETS : …… ENDSETS
    • 数据段: 用于变量赋值与数据传递 DATA :…… ENDDATA
    • 目标与约束段: 用于列出目标与约束 (唯一一个没有段的开始和结束标记)
    • 计算段: 用于数据初始整理计算 CALC:…… ENDCALC
    • 初始段: 用于变量赋初值迭代寻优 INT:…… ENDINT
    • 自模型段: 用于表达子模型进行调用 @SUBMODEL mymodel 可执行语句(约束+目标) ENDSUBMODEL
  • 基本集合 与 属性变量

    • 数建--LINGO软件介绍_第11张图片

      sets: ! 集合段
      s/1..100/:x; !基本集合,集合名与属性变量
      endsets
      !目标与约束段;
      @sum(s(i) : x(i)) < 90; !循坏求和函数
      
    • 数建--LINGO软件介绍_第12张图片

      sets: ! 集合段
      ss/1..10/:b; !基本集合,集合名与属性变量
      endsets
      data: !数据段;
      b = 1 0 1 2 3 5 2 6 1 2;
      enddata
      

    -数建--LINGO软件介绍_第13张图片

    sets: ! 集合段
    a/1..100/:x; !基本集合,集合名与属性变量
    b/1..200/:y; !基本集合,集合名与属性变量
    endsets
    !目标与约束段
    @ for(b(j):@gin(y(j)));
    @ for(a(i):@bin(x(i)));
    
  • 实例:

    • 题目 数建--LINGO软件介绍_第14张图片

    • 建立模型 数建--LINGO软件介绍_第15张图片

    • 程序

      model:
      TITLE 超市大赢家
      SETS:
      S/1..50/:W,V,X;
      ENDSETS
      DATA:
      V = 220, 208, 198, 192, 180, 180, 165, 162, 160, 158,155, 130,125, 122, 120, 118, 115, 110, 105, 101, 100, 100, 98,96, 95, 90, 88,82, 80, 77, 75, 73, 72, 70, 69, 66, 65, 63, 60, 58,56, 50, 30, 20, 15,10, 8, 5, 3, 1
      w = 80, 82, 85, 70, 72, 70, 66, 50, 55, 25, 50, 55, 40, 48,50, 32, 22,  60, 30, 32, 40, 38, 35, 32, 25, 28, 30, 22, 50, 30, 45,30, 60, 50, 20, 65, 20, 25, 30, 10, 20, 25, 15, 10, 10, 10, 4, 4, 2,1
      ENDDATA
      MAX = @SUM(S(I) : V(I) * X(I));
      @SUM(S((I) : W(I)*X(I))) < 1000;
      @FOR(S(I):@BIN(X(I)));
      END
      

      数建--LINGO软件介绍_第16张图片

三、多维数组型变量

  • 派生集合与多维数字型变量

    • 数建--LINGO软件介绍_第17张图片

      sets:
      a/1..10/ : ;
      b/1..200/: ;
      C(a,b) : x; ! 派生集合;
      endsets
      ! 目标与约束段;
      @ sum(c(i,j):x(i,j)) = 280;
      
      
    • 数建--LINGO软件介绍_第18张图片

    sets:
    a/1..100/:;
    b/1..200/:;
    C(a,b):x;
    Endsets
    ! 目标与约束段
    @for(b(j):@sum(a(i):x(i,j)) > 150.001);
    !集合 元素循坏函数
    
    • 数建--LINGO软件介绍_第19张图片

      sets;
      a/1..100/:;
      b/1..200/:y;
      C(a,b):x;
      Endsets
      !目标与约束段;
      @for(b(j):@gin(y(j)));
      @for(c(i,j):@bin(x(i,j)));
      
  • 逻辑运算符与过滤条件(无前面的/)

    • / # AND # (与)
    • / # OR # (或)
    • / # NOT # (非)
    • / # EQ # (等于)
    • / # NE # (不等于)
    • / # GT # (大于)
    • / # GE # (大于等于)
    • / # LT # (小于)
    • / # LE # (小于等于)
    • @IF(logical_condition, true_result, false_result) 当逻辑表达式logical_condition的结果为真时,返回true_result, 否则返回false_result。

数建--LINGO软件介绍_第20张图片

  • 案例:

    • 数建--LINGO软件介绍_第21张图片

      sets:
      a/1..20/:;
      b/1..30/:;
      C/1..40/:;
      d(a,b,c):x;
      endsets
      ! 目标与约束段;
      @ for(a(i) : @for(b(j):@sum(c(i,j,k) | k#gt#1#and#k#ne#10:x(i,j,k)) = 100 )); !过滤条件
      
    • 数建--LINGO软件介绍_第22张图片

四、线性规划模型的LINGO求解

-数建--LINGO软件介绍_第23张图片

sets:
HANG/1..3/:B;
LIE/1..4/:x;
XISHU(HANG,LIE):A;
endsets
DATA:
A = 1 2 3 1
    2 5 1 2
    3 1 6 -2;
B = 4 5 7;
enddata
@ for(HANG(I) :
     @sum(LIE(J) : A(I,J) * X(J)) > B(I));
  • 例二数建--LINGO软件介绍_第24张图片

你可能感兴趣的:(数模,经验分享,其他)