整数规划实现

实验三  整数规划实现

一、实验目的

1、掌握0-1整数规划原理;

2、用Matlab实现0-1整数规划隐枚举法的常规解法或简化解法;

3、对0-1整数规划求解算法进行评价。

二、实验要求

安装Matlab,编写代码实现以下例题6的求解,可以采用常规解法或简化解法求解。

使用Matlab实现0-1整数规划隐枚举法常规解法或简化解法。编写代码实现以下例题6的求解,同时与手工计算结果比对。按实验内容及步骤完成操作,完成实验报告,所有实验环节均由每位学生独立完成,严禁抄袭他人实验结果。最终提交的文件包括代码、数据、实验报告(内含预习报告)。

三、实验环境

PC机,Matlab2019b或更高的版本。

四、实验内容及分析

0-1整数规划常规解法或简化解法的实现。

整数规划实现_第1张图片

 

整数规划实现_第2张图片

 

输入:

整数规划实现_第3张图片

 整数规划实现_第4张图片

 

输出:

整数规划实现_第5张图片

 整数规划实现_第6张图片

 

具体代码如下:

%主函数:

c=input('输入系数 c=')

A=input('系数矩阵 A=')

b=input('输入资源矩阵 b=')

[m,n]=size(A);

allsolution=lingyi(n);

z=[];

x=zeros(n,1);

for i=1:2^n

    z=[z;objfunction(c,allsolution(i,:)')];

end

[maxx, maxxi]=max(z);

while feasible(A,allsolution(maxxi,:)',b)==0

    allsolution(maxxi,:)=[];

    z(maxxi,:)=[];

    [maxx, maxxi]=max(z);

end

input('the optimization solution of the programming is:')

  allsolution(maxxi,:)

input('the optimization value of the programming is:')

 max(z(maxxi))

%子函数1:

function z=objfunction(c,x)

z=c*x

end

%子函数2:

function t=feasible(A,x,b)

if(A*x-b)<=0

    t=1;

else

    t=0;

end

end

%子函数3:

function y=lingyi(k)

if k==1

    y=[0;1];

else if k>1

        lc=2^(k-1);

        xinlie1=zeros(lc,1);

        xinlie2=ones(lc,1);

        xinlie=[xinlie1;xinlie2];

        pre_lingyi=lingyi(k-1);

        pre_lingyi=[pre_lingyi;pre_lingyi];

        y=[xinlie,pre_lingyi];

    end

end

end

求解基于两种方法:暴力"穷举"方法和"隐式枚举"方法。

ZeroOneprog函数有4个输入参数。

C:线性目标函数的系数向量

A:线性不等式约束的系数矩阵

B:线性不等式约束的右侧向量

X0:问题的初始可行整数解

该函数返回两个输出:

Intx:问题的最优解(即最小化目标函数的变量向量)。

Intf:目标函数的最小值

根据矩阵A的大小,可以通过调用两个子函数中的一个来找到解决方案:Allprog或Implicitprog。如果矩阵A的列数小于3,则调用Allprog函数来使用穷举方法解决问题。否则,调用Implicitprog函数,以初始可行解x0为起点,使用隐式枚举方法求解该问题。

Allprog函数使用蛮力方法来解决这个问题。它枚举决策变量的所有可能值(即长度等于A列数的所有可能的二元向量),并检查每个可能的解是否满足不等式约束。对于每个可行解,它计算目标函数的值,并跟踪找到的最小值。该函数返回最优解(即最小化目标函数的决策变量向量)和目标函数的最小值。

Implicitprog函数使用隐式枚举方法来解决这个问题。它从初始可行解x0开始,执行一系列的局部改进,迭代寻找一个更好的可行解,直到无法再进行进一步的改进。该函数返回最终的可行解(即最小化目标函数的决策变量向量)和目标函数的最小值。

五、实验小结

通过本次实验,我学习了如何使用 Matlab 实现 0-1 整数规划隐枚举法。并且所求结果与手算结果一致。在实验中使用了 Matlab 的内置函数Allprog或Implicitprog实现了枚举所有可能的变量组合的过程,然后使用循环语句遍历每一组变量组合,并判断是否满足约束条件,如果满足就计算出目标函数的值,并比较是否比当前最优解更优,如果更优就更新最优解。最后,我们输出了最优解和最优值。

总的来说,本次实验对于我们理解0-1整数规划隐枚举法的基本原理和使用 Matlab 实现这种方法的方法有很大的帮助。

你可能感兴趣的:(最优化算法,算法)