功能:混合整数二次规划

格式:
[flag, mf, x] = QuadProgNLP(Q, g, A, c, B, d, max, min, x0, int, seed, nbird, loop1, loop2)
[flag, mf, x] = QuadProgNLP(Q, g, A, c, B, d, max, min, x0, int, seed, nbird, loop1)
[flag, mf, x] = QuadProgNLP(Q, g, A, c, B, d, max, min, x0, int, seed, nbird)
[flag, mf, x] = QuadProgNLP(Q, g, A, c, B, d, max, min, x0, int, seed)
[flag, mf, x] = QuadProgNLP(Q, g, A, c, B, d, max, min, x0, int)
[flag, mf, x] = QuadProgNLP(Q, g, A, c, B, d, max, min, x0)
[flag, mf, x] = QuadProgNLP(Q, g, A, c, B, d, max, min)
[flag, mf, x] = QuadProgNLP(Q, g, A, c, B, d, max)
[flag, mf, x] = QuadProgNLP(Q, g, A, c, B, d)
[flag, mf, x] = QuadProgNLP(Q, g, A, c, B)
[flag, mf, x] = QuadProgNLP(Q, g, A, c)
[flag, mf, x] = QuadProgNLP(Q, g, A)
[flag, mf, x] = QuadProgNLP(Q, g)
[flag, mf, x] = QuadProgNLP(Q)

Q: 一个n*n的矩阵变量
g: 一个n*1的矩阵变量,为空时表示0矩阵
A: 一个m*n的约束矩阵变量,为空时表示0矩阵
c: 一个m*1的约束矩阵变量,为空时表示0矩阵
B: 一个p*n的约束矩阵变量,为空时表示0矩阵
d: 一个p*1的约束矩阵变量,为空时表示0矩阵
max: 一个n*1的矩阵变量,或者数值,表示求解变量x的上限,默认为10000
min: 一个n*1的矩阵变量,或者数值,表示求解变量x的下限,默认为-10000
x0 : 一个n*1的矩阵变量,或者数值,表示求解变量x的初值,默认为1
type: 一个n*1的矩阵变量,或者数值,表示求解变量x的类型,0为浮点数,1为整数, 2为01变量
seed : 数值变量,表示求解种子数, 默认为66
nbird: 种群数量,默认为18
loop1: 外循环次数,默认16
loop2: 最大迭代次数,默认2048

flag:函数返回求解结果约束的标志, 如果为0表示本结果不满足所有约束, 如果为1表示当前解满足等式与不等式约束. 注意, 本参数使用一个内置的阈值来进行判断,具体是否满足要求, 可以将返回的x代入原约束进行比较。
mf  :函数求解成返回的最小值
x   :函数求解成功返回的解x

说明:
1、本函数主要求解如下一类约束问题
求目标最小值 : x^T * Q * x + x^T * g
其中x满足约束: A * x ≤ c 且 B * x = d

2、本函数内部采用梯度优化模块进行求解。

例子:
//假如有如下矩阵变量, 现在求 x^T * Q * x + x^T *g最小值,其中满足约束 A * x ≤ c，其x当中第1个元素为双精度数,第2个数据为整数,x当中元素范围[0,10000]
Q =
[-2.81616586857297   -26.9744024504788
 -5.28511561233789    30.2836351004819 ]

g =
[ 49.4263655503403
  2.36745930852715 ]

A =
[ 1.66889696925362    31.7093210675331 ]

c =
[ 87.5493996718663 ]

//输入如下变量进行求解
xt =[0 1];//申明x当中第1个元素为非整数,第2个元素为整数
maxvar = 10000;
minvar = -10000;
var0   = 1;

[f, m, x] = QuadProgNLP(Q, g, A, c, , , maxvar, minvar, var0, xt)//回车得到如下结果
f =
[ 1.00000000000000 ]
m =
[-1141231440.07335 ]
x =
[-9999.99999995712
 -5326.00000000000 ]