প্রতিক্রিয়া-প্রসারণ সমস্যার জন্য সুস্পষ্ট এলিউর পদ্ধতি খুব ধীর


10

আমি নিম্নলিখিত সি ++ কোড দিয়ে টিউরিংয়ের প্রতিক্রিয়া-প্রসারণ সিস্টেমটি সমাধান করছি। এটি খুব ধীর: 128x128 পিক্সেল জমিনের জন্য, গ্রহণযোগ্য পুনরাবৃত্তির সংখ্যা 200 - যার ফলে 2.5 সেকেন্ড বিলম্ব হয়। আকর্ষণীয় চিত্র পেতে আমার 400 টি পুনরাবৃত্তি প্রয়োজন - তবে 5 সেকেন্ডের অপেক্ষা খুব বেশি। এছাড়াও, টেক্সচারের আকারটি আসলে 512x512 হওয়া উচিত - তবে এর ফলে বিশাল অপেক্ষার সময় আসে। ডিভাইসগুলি আইপ্যাড, আইপড।

এটির দ্রুত করার কোনও সুযোগ আছে কি? ইউলার পদ্ধতি আস্তে আস্তে রূপান্তরিত হয় (উইকিপিডিয়া) - দ্রুত পদ্ধতি থাকলে পুনরাবৃত্তির সংখ্যা হ্রাস করতে পারে?

সম্পাদনা: থমাস ক্লিম্পেল যেমন উল্লেখ করেছেন, লাইনগুলি: "যদি (এম_আন [i] [জে] <0.0) {...}", "যদি (এম_বিএন [i] [জে] <0.0) {...}" অভিযোজনে বিলম্ব করছে: অপসারণের পরে, 75 টি পুনরাবৃত্তির পরে অর্থবহ চিত্রটি উপস্থিত হয় । আমি নীচে কোড লাইন মন্তব্য করেছেন।

void TuringSystem::solve( int iterations, double CA, double CB ) {
    m_iterations = iterations;
    m_CA = CA;
    m_CB = CB;

    solveProcess();
}

void set_torus( int & x_plus1, int & x_minus1, int x, int size ) {
    // Wrap "edges"
    x_plus1 = x+1;
    x_minus1 = x-1;
    if( x == size - 1 ) { x_plus1 = 0; }
    if( x == 0 ) { x_minus1 = size - 1; }
}

void TuringSystem::solveProcess() {
    int n, i, j, i_add1, i_sub1, j_add1, j_sub1;
    double DiA, ReA, DiB, ReB;

    // uses Euler's method to solve the diff eqns
    for( n=0; n < m_iterations; ++n ) {
        for( i=0; i < m_height; ++i ) {
            set_torus(i_add1, i_sub1, i, m_height);

            for( j=0; j < m_width; ++j ) {
                set_torus(j_add1, j_sub1, j, m_width);

                // Component A
                DiA = m_CA * ( m_Ao[i_add1][j] - 2.0 * m_Ao[i][j] + m_Ao[i_sub1][j]   +   m_Ao[i][j_add1] - 2.0 * m_Ao[i][j] + m_Ao[i][j_sub1] );
                ReA = m_Ao[i][j] * m_Bo[i][j] - m_Ao[i][j] - 12.0;
                m_An[i][j] = m_Ao[i][j] + 0.01 * (ReA + DiA);
                // if( m_An[i][j] < 0.0 ) { m_An[i][j] = 0.0; }

                // Component B
                DiB = m_CB * ( m_Bo[i_add1][j] - 2.0 * m_Bo[i][j] + m_Bo[i_sub1][j]   +   m_Bo[i][j_add1] - 2.0 * m_Bo[i][j] + m_Bo[i][j_sub1] );
                ReB = 16.0 - m_Ao[i][j] * m_Bo[i][j];
                m_Bn[i][j] = m_Bo[i][j] + 0.01 * (ReB + DiB);
                // if( m_Bn[i][j] < 0.0 ) { m_Bn[i][j]=0.0; }
            }
        }

        // Swap Ao for An, Bo for Bn
        swapBuffers();
    }
}

এছাড়াও, আমি উল্লেখ করতে চাই যে আপনি ক্রস-পোস্ট প্রশ্ন না করা পছন্দ করা উচিত, যেহেতু এটি এখানে এবং এখানে উভয়ই খুব অনুরূপ প্রশ্ন জিজ্ঞাসা করেছেন বলে মনে হয় ।
গড্রিক সের

আপনি কি কোনও সুযোগেই ইতিমধ্যে গ্রেগ তুরস্কের কাজটি দেখেছেন ?
জেএম

@ জেএম: এখনও নেই। আমি কেবল তার কোডটি চালানোর চেষ্টা করেছি: এর জন্য সিউডো কালার সহ এক্স সার্ভার প্রয়োজন, অর্থাত্ 8 বিটের বর্ণের গভীরতা। আমি মনে করি আমি এটি ওএসএক্সে সরবরাহ করতে পারি না। আমি বিভিন্ন ভিএনসি সার্ভার চেষ্টা করেছি তবে ভাগ্য নেই।
অলকোডার

আমি মনে করি আপনার কাছে এখনও বিষয়টি তুর্কের দৃষ্টিভঙ্গিটিকে সামঞ্জস্য করতে সক্ষম হওয়া উচিত; প্রতিক্রিয়া-প্রসারণ নিদর্শনগুলি আজকাল কম্পিউটার গ্রাফিক্সে মোটামুটি বিট হিসাবে ব্যবহৃত হবে বলে মনে হচ্ছে।
জেএম

1
আমি ভুল হতে পারি, তবে এম_আনের সাথে অংশ [i] [জে] = ০.০; এই সিস্টেমটিতে আসলে এমন একটি উপাদান যুক্ত হতে পারে যা ডান হাতের অবিচ্ছিন্ন দিক দিয়ে একটি ডিফারেনশিয়াল সমীকরণ দ্বারা মডেল করা যায় না। এটি একটি দ্রুত দ্রাবক নিয়ে আসা কিছুটা কঠিন করে তোলে।
টমাস ক্লিম্পেল

উত্তর:


9

আপনি স্থিতিশীলতার দ্বারা সীমাবদ্ধ বলে মনে করছেন, যা গ্রিডটি পরিমার্জন করার সাথে সাথে বিচ্ছুরণ কঠোর হওয়ায় এটি প্রত্যাশিত। কড়া সিস্টেমগুলির জন্য ভাল পদ্ধতিগুলি অন্তত আংশিকভাবে অন্তর্ভুক্ত। এটি কিছুটা প্রচেষ্টা নেবে, তবে আপনি দশটিও কম "ওয়ার্ক ইউনিট" (মূলত আপনার সময়ের এক ধাপের জন্য) ব্যয় নিয়ে এই সিস্টেমটি সমাধান করার জন্য একটি সাধারণ মাল্টিগ্রিড অ্যালগরিদম (বা একটি লাইব্রেরি ব্যবহার করতে পারেন) প্রয়োগ করতে পারেন। আপনি যখন গ্রিডটি পরিমার্জন করবেন তখন পুনরাবৃত্তির সংখ্যা বাড়বে না।


এখানে যদি কেবল ছড়িয়ে পড়া শক্ত হয় তবে তিনি ডগলাস-গানের মতো একটি এডিআই পদ্ধতি ব্যবহার করতে পারেন এবং সবকিছু ঠিকঠাক হবে। যাইহোক, আমার নিজের অভিজ্ঞতায় প্রতিক্রিয়ার অংশটি প্রায়শই খারাপভাবে ননলাইনার হওয়া ছাড়াও দৃff়তার সাথে আরও খারাপ হয়।
থমাস ক্লিম্পেল

1
দুর্ভাগ্যক্রমে এডিআইয়ের ভয়াবহ স্মৃতির লোকাল রয়েছে। এছাড়াও মনে রাখবেন যে প্রসারণ কিনা তা নির্বিশেষে প্রতিক্রিয়াটিকে সুস্পষ্টভাবে চিকিত্সা করা যেতে পারে। গ্রিড পরিশোধিতকরণের অধীনে, প্রসার অবশেষে প্রভাবশালী হয়ে উঠবে, তবে স্থিরত্বগুলি না জেনে থ্রেশহোল্ডটি কোথায় রয়েছে তা আমরা বলতে পারি না।
জেদ ব্রাউন 15

এর জন্য পশ্চাদপদ অলারের
ডেভিড কেচসন

@ ডেভিডকিচসন: অন্তর্নিহিত পদ্ধতি ব্যবহারের জন্য একটি সমীকরণ সমাধান করা দরকার? এই কারণেই কোডটিতে লিনালগ.সস্পলভ () রয়েছে?
অলকোডার

1
@ অ্যালকোডার হ্যাঁ, এটির সমাধান প্রয়োজন, তবে একটি সুস্পষ্ট পদ্ধতি স্থিতিশীল হওয়ার জন্য প্রয়োজনীয় সকল সময়ের পদক্ষেপের চেয়ে সমাধানটি আরও দ্রুত করা যায়।
জেড ব্রাউন

2

ব্যবহারিক দৃষ্টিকোণ থেকে: এ 5 প্রসেসরটি তেমন শক্তিশালী নয়, তাই আপনি কয়েকটি এইচডাব্লু পুনরাবৃত্তির জন্য অপেক্ষা করতে পারেন, বা যদি আপনার আইপড / আইপ্যাড ইন্টারনেটের সাথে সংযুক্ত হতে চলেছে, তবে সমস্যাটি দূর থেকে বা মেঘে সমাধান করুন।


আমি আশ্চর্য হই যে এ 5 কী পরিমাণ ক্ষুদ্র শক্তি সরবরাহ করে। পৃষ্ঠাগুলি, সাফারি এবং অন্যান্য বড় অ্যাপ্লিকেশনগুলি এত ভাল কীভাবে কাজ করতে পারে? আমার এলোমেলো, বিমূর্ত চিত্র উত্পন্ন করতে হবে, ভেবেছিল যে মরফোজেনেসিস যথেষ্ট সহজ হবে ..
অলকোডার

ওয়েল, এ 5 হ'ল একটি শক্তি-দক্ষ প্রসেসর যা ওয়েব এবং ভিডিও (পৃষ্ঠাগুলি, সাফারি ইত্যাদি) এর জন্য অনুকূলিত। বিপরীতে, বেশিরভাগ সংখ্যাসূচক কাজের চাপগুলি প্রচুর পরিমাণে ভাসমান-পয়েন্ট অপারেশন এবং ডেটা-মুভমেন্ট সম্পাদন করে, এই বৈশিষ্ট্যগুলি কম-পাওয়ার মোবাইল প্রসেসরের ফোকাস নয়।
এফক্রুজ

0

অয়লার অন্যান্য পদ্ধতির সাথে ধীরে ধীরে একত্রিত হন, তবে আমি মনে করি এটি আপনার আগ্রহী নয়। যদি আপনি কেবল "আকর্ষণীয়" চিত্রগুলি সন্ধান করছেন তবে আপনার সময়ের পদক্ষেপের আকার বাড়িয়ে নিন এবং কম পুনরাবৃত্তি করুন। সমস্যা যেমন জেড উল্লেখ করেছেন, স্পষ্টতই ইউলারের পদ্ধতিটিতে গ্রিডের আকারের সাথে বড় ধরণের পদক্ষেপ সহ স্থায়িত্বের সমস্যা রয়েছে। আপনার গ্রিডটি যত কম হবে (যেমন আপনার চিত্রটির উচ্চতর রেজোলিউশন), আপনার সময়ের পদক্ষেপটি তত কম হওয়া উচিত।

উদাহরণস্বরূপ, সুস্পষ্ট পরিবর্তে অন্তর্নিহিত ইউলার ব্যবহার করে আপনি কোনও একত্রিত হওয়ার কোনও অর্ডার পাবেন না, তবে সমাধানটিতে শর্তহীন স্থিতিশীলতা থাকবে, ফলে আরও বৃহত্তর সময়ের পদক্ষেপের অনুমতি দেওয়া হবে। অন্তর্নিহিত পদ্ধতিগুলি সময়-ধাপে আরও বেশি গণনা প্রয়োগ ও প্রয়োগ করতে আরও জটিল, তবে মোটে কম পদক্ষেপ গ্রহণের মাধ্যমে আপনার এর চেয়ে ভাল লাভ দেখতে হবে।


এই সমস্যাটি স্থায়িত্বের দ্বারা সীমাবদ্ধ তাই কেবল সময় পদক্ষেপের আকার বাড়ানো কাজ করবে না।
জেদ ব্রাউন

যদি আমি ০.০১-তে পরিবর্তিত হয়ে ০.০১৫, তবে আমি সমস্ত বিন্দুতে "কেম। এসপি। শূন্যের কাছাকাছি ঘনত্ব" পাই - অর্থাৎ ধূসর বর্গক্ষেত্র। এখানে আমার কোডের উত্স: drdobbs.com/article/print?articleId=184410024
AllCoder

হ্যাঁ, এটি জেদের উল্লেখযোগ্য স্থায়িত্বের সমস্যার ফল হবে। তিনি তার উত্তরে যেমন উল্লেখ করেছেন, আরও ভাল স্থায়িত্ব কর্মক্ষমতা দ্বারা চিহ্নিত একটি অন্তর্নিহিত পদ্ধতি ব্যবহার করা আপনার জন্য এই সমস্যাটি সমাধান করবে। অপ্রাসঙ্গিক তথ্য অপসারণ করতে আমি আমার উত্তর আপডেট করব।
গড্রিক সের
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.