سؤال

في منشور آخر، أعطاني MSN دليلاً جيدًا لحل مشكلة الجبر الخاصة بي (حساب سعر العرض من التكلفة الإجمالية).الآن، على الرغم من أنني أستطيع حساب ذلك يدويًا، فأنا عالق تمامًا في كيفية كتابة هذا في كود زائف أو كود.هل يمكن لأي شخص أن يعطيني تلميحًا سريعًا؟بالمناسبة، أريد حساب العرض في ضوء التكاليف النهائية.

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
هل كانت مفيدة؟

المحلول

يتم تبسيط الوظيفة إلى:

                  / 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 على سبيل المثال.

نصائح أخرى

ونظرا لاستخدام PIN وceiling، وأنا لا أرى وسيلة سهلة لعكس الحساب. على افتراض أن bid ودقة ثابت (كنت اعتقد اثنين من الكسور العشرية وراء نقطة) يمكنك دائما استخدام البحث الثنائي (كما وظائف هي رتيبة).

وتحرير: وبعد التفكير فيه بعض أكثر، لاحظت أنه، مع الأخذ x = bid*1.02 + 100، لدينا أن التكاليف النهائية بين س + 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، لذلك هذا ليس هو الحل الصحيح.

وأرجو أن أكون شرح واضح بما فيه الكفاية. إن لم يكن، واسمحوا لي أن أعرف.

وN.B: مع القيم الخاصة أعني تلك التي وظيفة تحديد قيم الاستخدام وتغير تكاليف إضافية. على سبيل المثال، لاستخدام تكلفة هذه القيم هي 100 و500: أدناه 100 استخدام 10، فوق 500 استخدام 50 وبين استخدام bid*0.1

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top