Advertisement
ArBa

ow_cw2_template

Oct 29th, 2020
1,991
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 3.26 KB | None | 0 0
  1. close all;
  2. clear all;
  3.  
  4. Sorting = true;
  5. sortCol = 3;
  6.  
  7. Filtering = false;
  8.  
  9. x = xlsread('data.xlsx','Decisions');
  10. x = x(:,2:5);
  11.  
  12. % x = xlsread('20181015-1', 'Arkusz1').';
  13. % x = xlsread('20181015-2', 'Arkusz1').';
  14. % x = x(3:end, :);
  15.  
  16.  
  17. all = x;
  18.  
  19.  
  20. paretoOptimal = [];
  21. x = dataCreate(params, items);
  22.  
  23. if Sorting
  24.     x = sortrows(x, sortCol);
  25. end
  26.  
  27. while size(x, 1) > 0
  28.     y = 1;
  29.     j = 2;
  30.     fl = false;
  31.     while j <= size(x, 1)
  32.         signum = sign(x(y, 1) - x(j, 1));
  33.         comparable = true;
  34.         for k = 2: size(x, 2)
  35.             signumK = sign(x(y, k)-x(j, k));
  36.             if signum == 0
  37.                 signum = signumK;
  38.             end
  39.             if signum * signumK < 0
  40.                 comparable = false;
  41.                 break
  42.             end
  43.         end
  44.         if comparable && signum > 0
  45.             x(y, :) = [];
  46.             y = j - 1;
  47.             j = j - 1;
  48.             fl = true;
  49.         elseif comparable
  50.             x(j, :) = [];
  51.             j = j - 1;
  52.         end
  53.         j = j + 1;
  54.     end
  55.    
  56.     checkPoint = x(y, :);
  57.     if fl == false || Filtering
  58.         paretoOptimal = [paretoOptimal; x(y, :)];
  59.         x(y, :) = [];
  60.     end
  61.    
  62.     if Filtering    
  63.         j = 1;
  64.         while j < size(x, 1)
  65.             signum = sign(checkPoint(1) - x(j, 1));
  66.             comparable = true;
  67.             for k = 2: size(x, 2)
  68.                 signumK = sign(checkPoint(k)-x(j, k));
  69.                 if signum == 0
  70.                     signum = signumK;
  71.                 end
  72.                 dimmCompareCnt = dimmCompareCnt + 1;
  73.                 if signum * signumK < 0
  74.                     comparable = false;
  75.                     break
  76.                 end
  77.             end
  78.             if comparable && signum < 0
  79.                 x(j, :) = [];
  80.                 j = j - 1;
  81.             end
  82.             j = j + 1;
  83.         end
  84.         if size(x, 1) == 1
  85.             paretoOptimal = [paretoOptimal; x(1, :)];
  86.             x(1, :) = [];
  87.         end
  88.     end
  89. end
  90.  
  91. % Rysowanie wykresu
  92. aH = axes;
  93. oneMat = ones(size(all,1),1);
  94. xL = get(aH,'XLim');
  95. yL = get(aH,'XLim');
  96. zL = get(aH,'XLim');
  97. hold on;
  98.  
  99. % Rzutowania punktów w 3d na płaszczyzny 2d
  100. plot3(oneMat .* xL(1), all(:,2), all(:,3), '.b');
  101. plot3(all(:,1), oneMat .* yL(1), all(:,3), '.b');
  102. plot3(all(:,1), all(:,2), oneMat .* zL(1), '.b');
  103. oneMat = ones(size(x,1),1);
  104. plot3(oneMat .* xL(1), x(:,2), x(:,3), '.r');
  105. plot3(x(:,1), oneMat .* yL(1), x(:,3), '.r');
  106. plot3(x(:,1), x(:,2), oneMat .* zL(1), '.r');
  107. grid on
  108. hold off;
  109.  
  110. % Wykres punktów w 3d
  111. scatter3(all(:,1),all(:,2),all(:,3),'filled')
  112. hold on;
  113. scatter3(x(:,1),x(:,2),x(:,3),'red','filled')
  114.  
  115. % Zaznaczenie punktu idealnego - zielony punkt na wykresie
  116. scatter3(min(x(:,1)),min(x(:,2)),min(x(:,3)),'green','filled'),
  117. plot3(oneMat .* xL(1), min(x(:,2)), min(x(:,3)), '.g');
  118. plot3(min(x(:,1)), oneMat .* yL(1), min(x(:,3)), '.g');
  119. plot3(min(x(:,1)), min(x(:,2)), oneMat .* zL(1), '.g');
  120.  
  121. % Zaznaczenie nadiru - żółty punkt na wykresie
  122. scatter3(max(x(:,1)),max(x(:,2)),max(x(:,3)),'yellow','filled'),
  123. plot3(oneMat .* xL(1), max(x(:,2)), max(x(:,3)), '.y');
  124. plot3(max(x(:,1)), oneMat .* yL(1), max(x(:,3)), '.y');
  125. plot3(max(x(:,1)), max(x(:,2)), oneMat .* zL(1), '.y');
  126.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement