एक बीजगणित समीकरण प्रोग्रामिंग

वोट
2

एक और पोस्ट में, एमएसएन मुझे मेरी बीजगणित समस्या (सुलझाने पर एक अच्छा मार्गदर्शक दिया कुल लागत से बोली मूल्य की गणना कर रहा )। अब, भले ही मैं इसे हाथ से गणना कर सकते हैं, मैं पूरी तरह से कैसे स्यूडोकोड या कोड में यह लिखने के लिए पर अटक कर रहा हूँ। किसी को भी मुझे एक त्वरित संकेत दे सकता है? वैसे, मैं अंतिम लागत को देखते हुए बोली की गणना करना चाहते हैं।

usage cost(bid) = PIN(bid*0.10, 10, 50)
seller cost(bid) = bid*.02
added cost(bid) = PIN(ceiling(bid/500)*5, 5, 10) + PIN(ceiling((bid - 1000)/2000)*5, 0, 10)
storing cost(bid) = 100
So the final cost is something like:

final cost(bid) = PIN(bid*.1, 10, 50) + pin(ceiling(bid/500)*5, 5, 20) + PIN(ceiling((bid - 1000)/2000)*10, 0, 20) + bid*.02 + 100 + bid
Solve for a particular value and you're done.

For example, if you want the total cost to be $2000:

2000 = PIN(bid*.1, 10, 50) + pin(ceiling(bid/500)*5, 5, 10) + PIN(ceiling((bid - 1000)/2000)*5, 0, 10) + bid*.02 + 100 + bid.
Bid must be at least > 1500 and < 2000, which works out nicely since we can make those PIN sections constant:

2000 = 50 + 10 + 5 + 100 + bid*1.02
1835 = bid*1.02
bid = 1799.0196078431372549019607843137
13/03/2009 को 02:08
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
2

के उपयोग के कारण PINऔर ceiling, मैं गणना को उलटने के लिए एक आसान तरीका नहीं दिख रहा। यह मानते हुए कि bidएक निश्चित परिशुद्धता (मैं डॉट के पीछे दो दशमलव लगता चाहते हैं) आप हमेशा एक द्विआधारी खोज का उपयोग कर सकते हैं (के रूप में कार्य एक लय कर रहे हैं) किया गया है।

संपादित करें: इसके बारे में कुछ और सोच के बाद, मुझे लगता है कि मनाया, ले जा रहा x = bid*1.02 + 100है, हम है कि अंतिम लागत x + 15 (अनन्य) और x + 70 (सम्मिलित) (यानी के बीच रहे हैं x+15 < final cost < x+70)। इस रेंज (के आकार को देखते हुए 70-15=55) और तथ्य यह है कि विशेष मूल्यों (नीचे नोट देखें) के लिए bidसब अलग इस से अधिक हैं, तो आप ले जा सकते हैं x+15 = final costऔर x+70 = final cost, सही मामलों / उपयोग के और कहा कि लागत मूल्यों को प्राप्त और बस उस समीकरण को हल ( जो अब या तो है PINया ceilingउस में)।

इसे समझने के लिए, अंतिम लागत रहने दो 222। से x+15 = 222यह इस प्रकार है कि bid = 107/1.02 = 104.90। फिर हम कि उपयोग लागत द्वारा दिया जाता है है bid*0.1और कहा कि अतिरिक्त शुल्क नहीं लगता 5। दूसरे शब्दों में, हम पाते हैं final cost = bid*0.1 + bid*0.02 + 5 + 100 + bid = bid*1.12 + 105और इसलिए bid = (222-105)/1.12 = 104.46। इस मूल्य के रूप में bidसाधन के उपयोग और अतिरिक्त लागत के लिए सही मान लिया गया था, हम जानते हैं कि यह समाधान है।

हालांकि, अगर हम पहले देखा है | x+70 = 222, हम निम्नलिखित मिलेगा। सबसे पहले हमें वह समझ यह धारणा है कि के लिए bid = 52/1.02 = 50.98। इसका मतलब यह है कि उपयोग खर्च कर रहे हैं 10और अतिरिक्त शुल्क नहीं लगता 5। इसलिए हम मिल final costs = 10 + bid*0.02 + 5 + 100 + bid = bid*1.02 + 115और इसलिए bid = (222-115)/1.02 = 104.90। लेकिन अगर bidहै 104.90तो उपयोग लागत नहीं कर रहे हैं 10लेकिन bid*0.1, तो यह सही समाधान नहीं है।

मुझे आशा है कि मैं यह स्पष्ट रूप से पर्याप्त समझाया। यदि नहीं, तो कृपया मुझे बताएं।

एनबी: विशेष मान के साथ मैं उन जिसके लिए समारोह उपयोग के मान निर्धारित करने का मतलब और कहा कि लागत बदल जाते हैं। उदाहरण के लिए, उपयोग लागत के लिए इन मूल्यों कर रहे हैं 100और 500: नीचे 100आप का उपयोग 10, ऊपर 500आप का उपयोग 50और बीच में आप का उपयोग bid*0.1

13/03/2009 को 02:47
का स्रोत उपयोगकर्ता

वोट
3

कार्य करने के लिए सरल:

                  / 1.02 * bid + 115   bid <   100
                  | 1.12 * bid + 105   bid <=  500
final cost(bid) = | 1.02 * bid + 160   bid <= 1000
                  | 1.02 * bid + 165   bid <= 3000
                  \ 1.02 * bid + 170   otherwise

तो आपको एक अलग समारोह के रूप में प्रत्येक टुकड़ा पर विचार करते हैं, तो वे उल्टे जा सकता है:

bid_a(cost) = (cost - 115) / 1.02
bid_b(cost) = (cost - 105) / 1.12
bid_c(cost) = (cost - 160) / 1.02
bid_d(cost) = (cost - 165) / 1.02
bid_e(cost) = (cost - 170) / 1.02

आप प्रत्येक कार्य में अपनी लागत प्लग तो आपको लगता है कि श्रृंखला के लिए अनुमानित बोली मूल्य मिलता है। आप जांच करनी चाहिए कि यह मूल्य वास्तव में उस के भीतर मान्य श्रेणी में कार्य करता है।

उदाहरण:

cost = 2000

bid_a(2000) = (2000 - 115) / 1.02 = 1848  Too big! Need to be < 100
bid_b(2000) = (2000 - 105) / 1.12 = 1692  Too big! Need to be <= 500
bid_c(2000) = (2000 - 160) / 1.02 = 1804  Too big! Need to be <= 1000
bid_d(2000) = (2000 - 165) / 1.02 = 1799  Good. It is <= 3000
bid_e(2000) = (2000 - 170) / 1.02 = 1794  Too small! Need to be > 3000

Just to check:

final cost(1799) = 1.02 * 1799 + 165 = 2000   Good!

के बाद से मूल कार्य सख्ती से बढ़ती जा रही है, उन कार्यों की ज़्यादा से ज़्यादा एक एक स्वीकार्य मूल्य दे देंगे। लेकिन कुछ इनपुट के लिए उनमें से कोई भी एक अच्छा मूल्य दे देंगे। यह मूल कार्य उन मूल्यों पर कूदता है क्योंकि है।

final cost(1000) = 1.02 * 1000 + 160 = 1180
final cost(1001) = 1.02 * 1001 + 165 = 1186

तो कोई समारोह के लिए एक स्वीकार्य मूल्य दे देंगे cost = 1182, उदाहरण के लिए।

13/03/2009 को 03:32
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more