6

से जावा सिम्युलेटेड एनीलिंग मैं वर्तमान में एक प्रोजेक्ट (टीएसपी) पर काम कर रहा हूं और कुछ अनुरूपित एनीलिंग छद्म कोड को जावा में परिवर्तित करने का प्रयास कर रहा हूं। मैं अतीत में छद्म कोड को जावा कोड में परिवर्तित करने में सफल रहा हूं, हालांकि मैं इसे सफलतापूर्वक रूपांतरित करने में असमर्थ हूं।छद्मोकोड

स्यूडोकोड है:

T0(T and a lowercase 0) Starting temperature 
Iter Number of iterations 
λ The cooling rate 

1. Set T = T0 (T and a lowercase 0) 
2. Let x = a random solution 
3. For i = 0 to Iter-1 
4. Let f = fitness of x 
5. Make a small change to x to make x’ 
6. Let f’ = fitness of new point 
7. If f’ is worse than f then 
8.  Let p = PR(f’, f, Ti (T with a lowercase i)) 
9.  If p > UR(0,1) then 
10.   Undo change (x and f) 
11.  Else 
12.   Let x = x’ 
13.  End if 
14.  Let Ti(T with a lowercase i) + 1 = λTi(λ and T with a lowercase i) 
15. End for 
Output: The solution x 

तो किसी ने मुझसे जावा में इस की एक बुनियादी मार्क-अप दिखा सकता है मैं बहुत आभारी होंगे - मैं सिर्फ यह पता लगा नहीं कर पा रहे!

मैं कई कार्यों का उपयोग करके कई कक्षाओं में काम कर रहा हूं (जो मैं सूचीबद्ध नहीं करूँगा क्योंकि यह पूछने के लिए अप्रासंगिक है)। मेरे पास पहले से smallChange() विधि और fitness फ़ंक्शन है - क्या ऐसा कोई मौका हो सकता है कि मुझे कहानियों के कई अलग-अलग संस्करण बनाने की आवश्यकता होगी?

public static ArrayList<Integer> smallChange(ArrayList<Integer> solution){ 

//Code is here. 

} 

मैं संभवतः इस विधि जो विभिन्न मापदंडों को स्वीकार करता है का एक और संस्करण की जरूरत किया जा सका: उदाहरण के लिए, मैं की तरह कुछ है? की तर्ज पर कुछ:

public static double smallChange(double d){ 

//Code is here. 

} 

सभी मैं की आवश्यकता होती है इस जब जावा में लिखा कैसे नज़र आएंगे एक बुनियादी विचार है - मैं एक बार मुझे पता है कि उस में की तरह दिखना चाहिए मेरी कोड के लिए यह अनुकूल करने के लिए सक्षम हो जाएगा सही वाक्यविन्यास, लेकिन मुझे इस विशेष बाधा को दूर नहीं लग रहा है।

धन्यवाद।

मिक

+0

यहाँ, आप भी मेरी कार्यान्वयन पर एक नज़र ले जा सकते हैं (यह के कुछ हिस्सों)। यह बहुत सामान्य है। http://stackoverflow.com/a/18657788/1809463 – mike

उत्तर

5

बुनियादी कोड इस तरह दिखना चाहिए:

public class YourClass { 
    public static Solution doYourStuff(double startingTemperature, int numberOfIterations, double coolingRate) { 
    double t = startingTemperature; 
    Solution x = createRandomSolution(); 
    double ti = t; 

    for (int i = 0; i < numberOfIterations; i ++) { 
     double f = calculateFitness(x); 
     Solution mutatedX = mutate(x); 
     double newF = calculateFitness(mutatedX); 
     if (newF < f) { 
     double p = PR(); // no idea what you're talking about here 
     if (p > UR(0, 1)) { // likewise 
      // then do nothing 
     } else { 
      x = mutatedX; 
     } 
     ti = t * coolingRate; 
     } 
    } 
    return x; 
    } 

    static class Solution { 
    // no idea what's in here... 
    } 
} 
अब जहाँ तक smallChange() विधि के विभिन्न संस्करणों के लिए इच्छुक

- पूरी तरह संभव है, लेकिन आप विरासत पर पढ़ने के लिए थोड़ा

+2

मुझे लगता है कि 'ti = t * coolingRate; 'ti = ti * coolingRate होना चाहिए;' – Deleplace

3

इसके अलावा, शिक्षण नकली annealing (नमूना कोड के साथ) के लिए एक जावा आधारित दृष्टिकोण यहाँ है:

Neller, टोड। Teaching Stochastic Local Search, आई। रसेल और जेड मार्कोव, eds। 18 वीं अंतर्राष्ट्रीय फ्लैश सम्मेलन की कार्यवाही (फ्लैश -2005), क्लीयरवॉटर बीच, फ्लोरिडा, मई 15-17, 2005, एएएआई प्रेस, पीपी 8-13।

संबंधित संसाधन, संदर्भ, और क़ौम यहां हैं: http://cs.gettysburg.edu/~tneller/resources/sls/index.html

+0

पेपर इसे पढ़ने के लिए वास्तव में लायक है। यह कोडिंग उदाहरणों का उपयोग करके पूरी तरह सिम्युलेटेड एनीलिंग की कार्यक्षमता को प्रेरित करता है और बताता है। जो कोड वे प्रदान करते हैं उन्हें आसानी से किसी भी प्रकार की अनुकूलन समस्या के अनुकूल बनाया जा सकता है। – Michael