برمجة معادلة الجبر
-
22-07-2019 - |
سؤال
في منشور آخر، أعطاني 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