Matlab遗传工具箱求解多目标规划问题

   线性规划只能解决一组线性约束条件下,一个目标的最大或最小值的问题。在实际决策中,衡量方案优劣要考虑多个目标,这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的,也有定性的;有相互补充的,也有相互对立的,线性规划则无能为力。

    多目标规划是数学规划的一个分支。研究多于一个的目标函数在给定区域上的最优化。又称多目标最优化。通常记为 MOP(multi-objective programming)。

    多目标规划的概念是 1961年由美国数学家查尔斯和库柏首先提出的。多目标最优化思想,最早是在1896年由法国经济学家V.帕雷托提出来的。他从政治经济学的角度考虑把本质上是不可比较的许多目标化成单个目标的最优化问题,从而涉及了多目标规划问题和多目标的概念。

以下用Matlab工具实现多目标规划问题:

Matlab实现的代码如下:

function y=Fun(x)

y(1) = -100*x(1)-90*x(2)-80*x(3)-70*x(4);
y(2) = 3*x(2)+2*x(4);

end
clear
clc
fitnessfcn=@Fun;
nvars=4;  % 变量个数

options=gaoptimset('paretoFraction',0.3,'populationsize',200,'generations',300,'stallGenLimit',200,'TolFun',1e-10,'PlotFcns',@gaplotpareto);

[x,fval]=gamultiobj(fitnessfcn,nvars,[-1 -1 0 0;0 0 -1 -1;3 0 2 0;0 3 0 2],[-30;-30;120;48],Aeq,beq,[0;0;0;0],[],options);
x,fval

plot(fval(:,1),-fval(:,2),'pr')
xlabel('f_1(x)')
ylabel('f_2(x)')
title('Pareto front')
grid on

得到的结果如下:

 得到一系列Pareto前沿 :

x =

   24.2310    6.3848   23.6540   14.4232
   24.2310    6.3848   23.6540   14.4232
   24.2940    5.7473   23.4867    7.2334
   24.3119    5.7330   23.4641    7.0706
   24.2633    5.8411   23.5074    7.2688
   24.2593    5.8447   23.5312   11.9272
   24.2838    5.7551   23.5006    7.1243
   24.2722    5.8546   23.5600    8.5598
   24.2637    6.0499   23.5045   11.4442
   24.3025    5.8562   23.5115    7.1489
   24.2680    5.8938   23.5864   11.2439
   24.2785    5.8243   23.5654    9.4312
   24.2734    5.9001   23.5442   10.6148
   24.2347    6.3488   23.5889   14.2295
   24.3119    5.7330   23.4641    7.0706
   24.2636    5.8827   23.4966   12.0057
   24.2685    5.8796   23.5810   10.4265
   24.2739    5.7686   23.5771   12.2672
   24.2575    5.8468   23.6032    9.8882
   24.2758    5.8889   23.5742   11.4497
   24.2648    5.8730   23.5928    7.3794
   24.2374    6.2066   23.6043   13.3456
   24.2701    5.8353   23.5747   12.3082
   24.2461    6.2268   23.6312   14.2939
   24.2384    6.2841   23.6427   14.0953
   24.2749    6.0008   23.5579    9.4942
   24.2717    5.7705   23.5616    8.5721
   24.2678    5.9393   23.5498   14.2271
   24.2629    6.0285   23.5792   12.5851
   24.2743    5.8390   23.5776   11.1474
   24.2637    6.0555   23.5389   14.2471
   24.2394    6.3071   23.5452   12.8484
   24.2795    5.9848   23.5105   14.0822
   24.2676    5.9160   23.5734   11.3326
   24.2569    6.0361   23.5942   10.2683
   24.2867    5.7677   23.5086    9.7176
   24.2811    5.8275   23.5238   11.8398
   24.2538    5.8332   23.5786   10.2752
   24.2720    5.9517   23.5299   10.4672
   24.2769    5.9159   23.5132    8.6929
   24.2539    5.9170   23.5680   12.8627
   24.2744    6.0381   23.5420   10.6600
   24.2745    5.7899   23.5452    8.7669
   24.2399    6.0532   23.5178   12.7813
   24.2783    5.8940   23.5224    9.1249
   24.2973    5.9457   23.5397    9.1363
   24.2718    5.8535   23.5340   10.2826
   24.2554    5.9432   23.5481   11.1031
   24.2502    6.2869   23.5676   14.0145
   24.2644    5.8804   23.5771    7.4663
   24.2403    6.2957   23.6124   12.5999
   24.2469    5.9873   23.6106    7.9534
   24.2401    6.0208   23.5869   13.7465
   24.2730    5.7865   23.5512    9.9019
   24.2322    6.3697   23.6133   14.3937
   24.2584    5.8918   23.5834   10.1014
   24.2549    5.8504   23.5624    9.5216
   24.2750    6.0170   23.5694   13.1424
   24.2773    5.7989   23.5347    7.4292
   24.2542    5.9219   23.5673   11.5097
   24.3056    6.0575   23.5373   10.4841
   24.2387    5.9602   23.6041   13.6125
   24.3025    5.8666   23.4888    8.3668
   24.2700    5.8581   23.5947   12.7078
   24.2342    6.3503   23.6287   13.6659
   24.2420    6.3507   23.6336   14.3035

由于y(1)是求最大值,故只需在下方fval的左侧添加负号即可得到结果

fval =

   1.0e+03 *

   -5.8997    0.0480
   -5.8997    0.0480
   -5.3319    0.0317
   -5.3192    0.0313
   -5.3414    0.0321
   -5.6693    0.0414
   -5.3251    0.0315
   -5.4381    0.0347
   -5.6523    0.0410
   -5.3386    0.0319
   -5.6312    0.0402
   -5.4975    0.0363
   -5.5849    0.0389
   -5.8780    0.0475
   -5.3192    0.0313
   -5.6759    0.0417
   -5.5724    0.0385
   -5.6914    0.0418
   -5.5324    0.0373
   -5.6450    0.0406
   -5.3590    0.0324
   -5.8049    0.0453
   -5.6997    0.0421
   -5.8761    0.0473
   -5.8675    0.0470
   -5.5168    0.0370
   -5.4315    0.0345
   -5.8412    0.0463
   -5.7361    0.0433
   -5.6195    0.0398
   -5.8518    0.0467
   -5.7746    0.0446
   -5.8332    0.0461
   -5.6384    0.0404
   -5.5753    0.0386
   -5.5087    0.0367
   -5.6633    0.0412
   -5.5559    0.0381
   -5.5779    0.0388
   -5.4497    0.0351
   -5.7438    0.0435
   -5.6004    0.0394
   -5.4458    0.0349
   -5.7449    0.0437
   -5.4788    0.0359
   -5.4876    0.0361
   -5.5565    0.0381
   -5.6215    0.0400
   -5.8573    0.0469
   -5.3645    0.0326
   -5.7616    0.0441
   -5.4091    0.0339
   -5.8151    0.0456
   -5.5253    0.0372
   -5.8931    0.0479
   -5.5499    0.0379
   -5.5035    0.0366
   -5.7745    0.0443
   -5.3525    0.0323
   -5.6495    0.0408
   -5.5926    0.0391
   -5.8015    0.0451
   -5.4230    0.0343
   -5.7313    0.0430
   -5.8419    0.0464
   -5.8877    0.0477

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值