WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Negative selection auf reale Zahlen bzw. schneller machen

 

eimer

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.11.2012, 19:03     Titel: Negative selection auf reale Zahlen bzw. schneller machen
  Antworten mit Zitat      
Hi Leute,

ich versuche gerade den Negative Selection Algorithmus (NSA) in Matlab zu implementieren. Oder sagen wir es so ich habe ihn implementiert, aber er ist sehr langsam und ich hätte gerne eine schnellere Version wenn es möglich ist.

Im Prinzip ist negative selection algorithm im binären schnell erklärt. Sagen wir ich habe eine 8bit Zahl A=[1 1 0 0 1 1 0 0]. Jetzt sagt der NSA ich möchte maximal zwei '1' in A also mache ich random zwei der vier '1' auf 0 und das ganze ist gelöst.

Hier mein bisheriger Code:

Code:
function [VnNS] = func_negSelection(matrix_Vn,int_vmax)
   VnNS=matrix_Vn;
   [int_Np, int_weights]=size(matrix_Vn);
      for counter_j=1:1:int_Np   %for all particles
         subVn=dec2bin(typecast(int16(matrix_Vn(counter_j,:)),'uint16'),16);
         %cut first particle out of Vn
         [int_M, int_N] = size(subVn);
         %size of subVn
         while sum(sum(subVn(:,:)-48))>int_vmax
            %apply negative selection
            int_randVn = randi([1,int_M*int_N-1],1,1,'double');
            %random number which represents the position n
            subVn(floor(int_randVn/int_N)+1,(int_N-1)-mod(int_randVn,int_N)+1)='0';
            %make all the values to '0' as long as the vector has to many '1's
         end
         VnNS(counter_j,:)=typecast(uint16(bin2dec(subVn(:,:))),'int16').';
         %rebuild Vn now with negative selection applied
      end
  end


Leider ist mein Code sehr langsam, da ich ihn bei einem Iterativen Algorithmus, namentlich PSO benutze braucht er sehr lange um mir mein Optimum zu bestimmen, das möchte ich nicht.

Jetzt meine Fragen:
1) Kann ich das ganze auch irgendwie auf 'double'/complexe Zahlen anwenden ohne die Umwandlung in bin bzw. char, dass frisst die meiste Zeit.
2)Kann ich mir eine double Zahl erzeugen, die mit einer Wahrscheinlichkeit von m einzen enthält? Das sollte so gehen:
Code:

rand_vec = rand(1, int_BIT) < mut_prob;
 

erfordert aber wieder die Umwandlung von logical to double ->double to string -> string to num was wieder super langsam ist.

Hoffe jemand von euch hat eine gute Idee.
Bei Problem 2 hatte ich an eine random zahl zwischen einem bestimmten Bereich gedacht die mit einer Wahrscheinlichkeit von m auftritt.

eimer


Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.