cplex基础入门(二)之数据初始化及变量约束

本文详细介绍了数据初始化的各种方法,包括数组的声明直接赋值法、.dat文件分离赋值法、(index,value)方式以及脚本语言赋值法。此外,还讲解了元组和集合的初始化,决策变量的定义,以及表达式和约束在编程中的应用。重点强调了如何在.mod和.dat文件中协同操作以初始化数据,并展示了条件表达式的使用。
摘要由CSDN通过智能技术生成

        在初步了解了关于相关数据结构之后,在来学习下如何进行数据初始化及变量约束等内容。

目录

1、变量数据初始化

1.1、数组的数据初始化

1.1.1、声明直接赋值法

1.1.2 、.dat文件分离赋值法

1.1.3、(index,value)方式赋值

1.1.4、脚本语言赋值法

1.2、元组数据初始化

1.3、集合数据初始化

2、决策变量

3、表达式

4、约束


1、变量数据初始化

1.1、数组的数据初始化

        数组的初始方式比较多,这里重点讲述重点的几种方式。

1.1.1、声明直接赋值法

    float fixedCost[1..4] = [200,300,400,500];    对于实数类别

    {string} Products = {"gas","chloride"};        string 声明自符串数组

1.1.2 、.dat文件分离赋值法

        这种方式需要结合两种文件一起完成,包括.mod文件以及.data文件

       其中 .mod文件中使用 … 表示待赋值。具体的实现方式举例为:

       在.mod文件中:float fixedCost[1..4] = …;
       在.dat文件里:
       fixedCost= [200,300,400,500];

1.1.3、(index,value)方式赋值

        这种方式需要用#[  ]#的方式,其中元素次序可以随意安排。

       {string} days = {"Mon", "Tue", "Wen"};
               float costs[days] = …;
       在.dat文件里:
               costs = #["Mon":200, "Wen": 140 , "Tue":300]#;   

        float transCost[1..2][1..4] = …;
        在.dat文件里:
            transCost = #[2:[600,700,800,900], 1:[200,300,400,500]]# ;

1.1.4、脚本语言赋值法

range dcs=1..10;                    
int  setCost[dcs];
execute {                        

     for(var n in dcs) {                                    

        setCost[n] = 2*n +1;  

                               }
             }

简化为:

range dcs=1..10;                    
 int  setCost[ n in dcs] =2*n+1;

1.2、元组数据初始化

单个变量初始化直接用<..>赋值

tuple TTruck {
        key int id;
       float fixedCost;
       float capacity;
     }


TTruck truck1 =<1,200,4000>

1.3、集合数据初始化

用一对{ }进行数据初始化

tuple TRetailer{
       string name;
       float demand;
       float serviceTime;
       }


 {TRetailer} retailers =
    {<“r1”,2000,15>, <“r2”, 3000,20>};

2、决策变量

使用关键字 dvar来定义决策变量

    {string} dcs = {“dc1”,”dc2”,”dc3” };
     dvar int x[dcs] in 0..1;
     表示是否开启某个配送中心, 1为开启,0为关闭 

可以使用 + 关键字限制决策变量只能为正

  dvar int+ x; 等价于  dvar int x in 0..maxInt;
  dvar float+ y; 等价于  dvar float y in 0..infinity;
  dvar boolean z; 等价于  dvar int z in 0..1;

3、表达式

表达式可以分为三种类型,包括

  • 整形表达式
  • 浮点表达式
  • 条件表达式

这里重点介绍条件表达式

   (condition)?thenExpr : elseExpr;
    int n=…;  
    int signValue = (n>0)?1: (n<0)?-1:0;

4、约束

约束的位置:目标函数必须位于约束前面

  • 约束应放到  subject to { }
  • 可以对约束命名,也可以不用命名;

maximize obj =  sum(p in products) profit[p] * quanity[p]
subject to { }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

且行且安~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值