假设有三个扇区A,B,C,A原本的负荷为40.684,B原本的负荷为54.099,C原本的负荷为59.569,现有15架航空器,需要分给这个3个扇区,每个扇区的分配数量随机,可以一架也没有也可以全部分配给一个扇区,但前提是航空器分配到这三个扇区后,原本的扇区负荷不能超过其原先的百分之六十(也就是约束条件),15航空器分配到三个扇区后会增加的负荷如表所示,最后要输出符合这个条件的最优分配方案和最优值,求大家给个思路,目前我只能求出不加约束条件情况下最优方案,不知道怎么去添加约束条件。源代码如下
clear;clc
f = [5.031 4.740 3.032 5.742 10.189 4.746 10.560 8.172 8.841 5.461 2.920 8.747 8.643 9.963 8.109;
5.003 9.078 7.243 5.318 5.943 10.179 5.540 1000 1000 1000 2.388 9.639 2.885 9.470 4.348;
17.276 17.360 9.293 9.049 13.139 6.797 10.724 11.479 9.536 6.234 2.477 6.226 4.919 4.525 3.462]';
[x,min_fval,exitflag] = myTaskArrange2(f);
function [x,min_fval,exitflag] = myTaskArrange2(f);
%%程序功能说明
%输入参数
%f m行n列的效益矩阵,m个航空器,n个扇区,
%输出参数
%x 目标函数取最小值时的自变量值
%min_fval 目标函数的最小值
% exitflag 退出标识符
%%程序主体
[m,n] = size(f); % 获取效益矩阵中航空器的个数和扇区的个数
% 按行拉成一列向量
f = f';
F = f(:);
% 构造等式约束(每一行加起来等于1,即每个航空器必须分配给一个扇区)
Aeq = cell(m,m);
Aeq(:) = {zeros(1,n)};
Aeq(eye(m,m)==1) = {ones(1,n)};
Aeq = cell2mat(Aeq);
Beq = ones(m,1);
%构建不等式约束(每个扇区接受的负荷不能超过原本负荷的百分之六十)
%此约束还没构建出来
% 取整变量地址
intcon = 1:m*n;
% 变量取值范围(大于0小于1)
LB = zeros(mn,1);
UB = ones(mn,1);
% 构造不等式约束(每一列加起来大于1小于m,即每个扇区可能被安排一个或者多个航空器,最多不超过航空器m)
A = repmat(eye(n,n),1,m);
B = ones(n,1)*m;
% 利用整数规划函数求解
[x,min_fval, exitflag] = intlinprog(f,intcon,A,B,Aeq,Beq,LB,UB);
%%将结果还原成效益矩阵对应形式
x = reshape(x,n,m)';
end
你的约束条件是什么