﻿功能:混合整数线性规划(分支界定法+正则形法)

格式:
[Maxf, xv] = LineProgInt(f,c,x,down,up,IsInt,Minf)
[Maxf, xv] = LineProgInt(f,c,x,down,up,IsInt)
[Maxf, xv] = LineProgInt(f,c,x,down,up)
[Maxf, xv] = LineProgInt(f,c,x,down)
[Maxf, xv] = LineProgInt(f,c,x)

f:符号变量,里面存储目标函函数的表达式(最大值)
c:符号变量,里面存储约束条件,注意约束条件当中可以使用"≤"、"<="、"=<"、"<"、"≥"、">="、"=>"、">"、"="其中"≤"、"<="、"=<"、"<"均等价,表示小于等于；其中"≥"、">="、"=>"、">"均等价,表示大于等于.每个约束条件之间使用逗号分隔.其中每个约束条件只能有1个判断符，如"1<=x1+x2*3<=x5"这种条件是要保报错的,这时可分开写成"1<=x1+x2*3,x1+x2*3<=5"
x:符号变量,存储各个变量的名称,每个名称以逗号分隔
down:数值或者矩阵变量,其表示x变量里对应的下限值,默认为0,你x里每个变量均大于等于0。注意此下限值不能取无穷
up:数值或者矩阵变量,其表示x变量里对应的上限值,默认为正无穷即 inf ,注意此上限值不能取负无穷
IsInt:数值或者矩阵变量,其对应x变量,如果里面元素值为1表示此变量为整数变量,否则为实数变量。此值默认为1，即认为所有变量均为整数.
Minf:为了计算效率,需要一个可行域的最小值来进行快速分支界定.程序默认此值为负无穷大.

Maxf:返回的最大值
xv:返回对应x的取值

注意:
1、如果你的条件中限制为 x>=-3 这个时候一定要在第4个参数down里进行设置,因为默认参数x>=0 .当然如果你条件中 x>=3 则可设置可不设置第4个参数。但是进行近亲设置效率会更高(小范围感觉不出来)
2、本程序因为要保证所有分支均计算过,所以可能出现内部调用次数太多导致程序卡死的问题.如果是工程需要,遇到这种问题，建议自行编写代码，进行区域分解来求解（即保存每次分支结果，下次直接从上次结果开始计算），即可解决这个问题。
3、当一个问题存在多组解时，虽然程序计算时会将所有解给计算出来，但结果只显示一组解.

参考:
//1、吕彬,郭全魁,陈磊.线性规划问题的新算法[M].国防工业出版社,2013(3)page:26-34
//2、何坚勇.最优化方法[M].清华大学出版社,2007:202-213

例子:

求目标函数 z = 10*x1+20*x2 的最大值,其中 0<=x1<=8,0<=x2<=4,且x1、x2为整数

f = "10*x1+20*x2";c="0.25*x1+0.4*x2<=3";m1=[8 4];x="x1,x2";[minf,x0] = LineProgInt(f,c,x,0,m1)//回车得到如下结果
minf =
[ 130.000000000000 ]
x0 =
[ 7.00000000000000    3.00000000000000 ]

