matlab最优化工具箱
一、实验目的(一)
通过一个农业生产计划优化安排的实例求解,培养学生解决实际线性规划问题的初步能力;熟悉线性规划的建模过程;掌握Matlab优化工具箱中线性规划函数的调用。
二、实验内容(一)
某村计划在100公顷的土地上种植a、b、c三种农作物。可以提供的劳力、粪肥和化肥等资源的数量,种植每公顷农作物所需这三种资源的数量。
其中一个劳动力干一天为1个工。现在要求为该村制定一个农作物的种植计划,确定每种农作物的种植面积,使得总利润最大。
建立线性规划的数学模型;
安装Matlab优化工具箱,并学习工具箱中求解线性规划的函数;
利用Matlab优化工具箱解线性规划问题。
c=[1500 1200 1800]'; A=[450 600 900;35 25 30;350 400 300]; b=[63000 3300 33000]'; Ae=[]; be=[]; lb=[0 0 0]'; ub=[]; [x,fval,exitflag,output,lambda]=linprog(-c,A,b,Ae,be,lb,ub);
结果
x = 60 0 40 ans = 162000
四、实验目的(二)
通过一个投资组合优化问题的实例求解,培养学生解决实际二次规划问题的初步能力;熟悉线性规划的建模过程;掌握Matlab优化工具箱中线性规划函数的调用。
五、实验内容(二)
求解从一点(0,0,0)到超平面的最短距离,
其中,。
通过建模构造二次规划问题,求解以上问题的最优解和最优值。
六、算法步骤、代码、及结果(二)
1. 算法步骤
在这个问题中,我们要优化的目标是点到超平面的距离,即
minimize: (1/2) * x’ * Q * x + c’ * x
subject to: Ax = b
其中,x是超平面上任意一点的坐标向量,Q和c由目标函数决定,A和b由约束条件决定。
为了表示优化问题的目标函数和约束条件,我们需要对二次规划问题进行一些转换。首先,我们可以将距离公式中的标量乘法展开:
distance^2 = (x - P0)’ * (x - P0)
其中,P0是超平面上到点(0,0,0)最近的一点,可以通过求解Ax=b得到。将上面的公式展开得到:
distance^2 = x’ * x - 2 * P0’ * x + P0’ * P0
因此,目标函数可以表示为:
0.5 * x’ * x - P0’ * x
其中,Q = I和c = -P0。同时,约束条件为Ax=b。
2. 代码
function distance = point_to_hyperplane_qp(A, b) n = null(A)'; P0 = A \ b; Q = eye(3); c = -P0'; Aeq = A; beq = b; x0 = [0; 0; 0]; options = optimoptions('quadprog', 'Algorithm', 'interior-point-convex'); [x, ~, ~, ~, ~] = quadprog(Q, c, [], [], Aeq, beq, [], [], x0, options); distance = norm(x); end >> A = [1 2 -1; -1 1 -1]; >> b = [4; 2]; >> point_to_hyperplane_qp(A, b)
结果
ans = 1.7321