Προγραμματισμός μια εξίσωση άλγεβρας

ψήφοι
2

σε άλλη θέση, το 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
Δημοσιεύθηκε 13/03/2009 στις 02:08
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
2

Λόγω της χρήσης του PINκαι ceiling, δεν βλέπω έναν εύκολο τρόπο για να αντιστρέψετε τον υπολογισμό. Υποθέτοντας ότι bidέχει μια σταθερή ακρίβεια (θα ήθελα να μαντέψω δύο δεκαδικών ψηφίων πίσω από την dot) μπορείτε πάντα να χρησιμοποιήσετε μια δυαδική αναζήτηση (όπως οι λειτουργίες είναι μονότονο).

Επεξεργασία: Μετά το σκέφτομαι λίγο περισσότερο, παρατήρησα ότι, λαμβάνοντας 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