跪求对这段matlab程序的说明

跪求对这段matlab程序的说明,第1张

分支定界法:把全部可行解空间反复的分割为越来越小的子集;并且对子集内的解集计算一个目标下界(最小值问题),称为定界。

算法过程:

假设:A问题是要求解的整数规划问题,与之对应的线性规划问题为B(即去除整数约束),z*是A的最优解,~z是任一可行解,z~是B的最优解。

(1) 分支,在B的最优解中任选一个不符合整数条件的变量xj,其值为bj,以[bj]表示不大于bj的整数。构造两个约束条件xj<=[bj]和xj>=[bj]+1,将这两个条件加入B问题,分支成为新的规划B1和B2问题

定界,以B1和B2问题求解,与其他问题的解的结果中,找到最优目标函数的最大值作为新的上界~z。从已符合整数条件的各个分支中,找到目标函数值为最大者为新的下界~z,若无作用~z=0

(2) 比较与剪支,各分支的最优目标函数中若有小于z~者,则剪去这一支,即以后不再考虑了。若大于~z,且不符改胡合整数条件,则重复(1)步骤。直到键银最后得到z*=~z为止。

知道原理理解就好了。其实可以不去理解程序本身的,核亮拦知道原理自己也可以编程的

从你的程序中的如下这条语句可以看出变量ID是全局变量:高销

global upper opt c x0 A b Aeq beq ID options

该全局变量(ID)是在你的函数之外被别的激念瞎明空程序语句进行过赋值,而且也很有可能被赋成了向量/矩阵、并且它的维数大小跟向量x的维数大小并不相同,这就造成了进行运算x.*ID的时候维数不匹配的问题。

如何用matlab求方程的所有整数解?其解决方案,可以通过下列途径解决:

方法一、利用三循环语粗烂句和判断语句橡凳和,求解其所有整数解

方法二、整数线性规划分支定界法,求解其所有整数解

下面按第一种方法求解,其过程为

m=50n=50l=50

disp('满足条件:2x+3y+4z=100的解')

for i=1:m

  for j=1:n

      for k=1:l

          x=iy=jz=k

 梁盯         xyz=100-(2*x+3*y+4*z)

          if xyz==0

              disp(['x=',num2str(i),' y=',num2str(j),' z=',num2str(k)])

          end

      end

  end

end

运行结果


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12463021.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存