功能:非线性混合整数规划之粒子群算法

格式:
[mf,a,er]=nlinProgIntPSO(minF,limit,x,x0,x_min,x_max,Type,k,Nbird,LoopSum)
[mf,a,er]=nlinProgIntPSO(minF,limit,x,x0,x_min,x_max,Type,k,Nbird)
[mf,a,er]=nlinProgIntPSO(minF,limit,x,x0,x_min,x_max,Type,k)
[mf,a,er]=nlinProgIntPSO(minF,limit,x,x0,x_min,x_max,Type)
[mf,a,er]=nlinProgIntPSO(minF,limit,x,x0,x_min,x_max)
[mf,a,er]=nlinProgIntPSO(minF,limit,x,x0,x_min)
[mf,a,er]=nlinProgIntPSO(minF,limit,x,x0)

minF:符号变量存储的目标函数表达式(注意求最小值) 
limit:符号变量存储的条件表达式,其中每个条件以逗号分隔,条件里运行出现">、<、="三种符号,注意仅支持单一条件,如 "sin(x)>0.1"但不支持"0.5>sin(x)>0.1"这种形式,如果没有任何一种比较符号,则表示等式大于等于0 
x:符号变量存储的变量名称,每个名称以逗号分隔 
x0:矩阵变量或者数值变量,表示对应x的初始值
x_min:数值或者矩阵变量,对应x变量的下限值,默认-1024
x_max:数值或者矩阵变量,对应x变量的上限值,默认1024
Type:此值为矩阵变量或者数值变量,指示x当中变量是否为整数,其中为0表示非整数,否则为整数变量,默认为1
k:控制算法收敛性的参数数值,表示条件数的权重系数,默认为1000
Nbird:种群数,默认200
LoopSum:总迭代次数,默认3000

mf:返回的最小值
a:返回此时x的系数
er:返回的条件误差

说明:

1、返回值er反映了找到的解满足条件limit的程度,即使er为0也不表示mf为最优解,只能说此解严格满足限制条件。

2、本函数内部在构建罚函数时,分前期与后期,在判断标准上有所不同.且函数内部对整数变量每一次的最优解会进行简单跟踪搜索.

3、本函数内部采用的罚函数为g(x)=f(x)+k*(exp(x)-1)

例子:
/*以线性规划的Beale问题为例 

求如下目标函数的最大值 

f=0.75*x1-20*x2+0.5*x3-6*x4 

其约束条件如下 

0.25*x1-8*x2-x3+9*x4≤0 
0.5*x1-12*x2-0.5*x3+3*x4≤0 
x3≤1 
x1>=0,x2>=0,x3>=0,x4>=0 

*/ 

//依次执行如下4条命令后将得到存储到a变量当中的结果,注意c、x变量中逗号分隔的意义 
f = "-0.75*x1+20*x2-0.5*x3+6*x4"; 
c = "0.25*x1-8*x2-x3+9*x4<=0,0.5*x1-12*x2-0.5*x3+3*x4≤0,x3<=1"; 
x = "x1,x2,x3,x4";
xMax=[1024,1024,1,1024];//这里假设x1、x2、x4的上限为1024,x3上限为1
xt=[1 1 1 1];//表示x当中每一个变量为整数,如果对应变量非整数,将对应位置的1变为0即可
[mf,a0,er]=nlinProgIntPSO(f,c,x,,0,xMax,xt)//执行命令回车得到如下结果,注意当中的0表示变量下限
mf =
[-1.25000000000000 ]
a0 =
[ 1.00000000000000    0.00000000000000    1.00000000000000    0.00000000000000 ]
er =
[ 0.00000000000000 ]