2


0

別の投稿で、MSNは私の代数問題を解決するための良いガイドをくれました( 合計コストから入札価格を計算する)。 今、私はそれを手で計算することができますが、私はこれを疑似コードまたはコードで書く方法について完全に立ち往生しています。 誰かが私に簡単なヒントを与えることができますか? ところで、私は最終的な費用を考慮して入札を計算したいと思います。

使用費用(bid)= PIN(bid * 0.10、10、50)販売者費用(bid)= bid * .02追加費用(bid)= PIN(上限(bid / 500)* 5、5、10)PIN(上限) ((bid  -  1000)/ 2000)* 5、0、10)保存コスト(bid)= 100したがって、最終コストは次のようになります。

最終費用(bid)= PIN(bid * .1、10、50)pin(上限(bid / 500)* 5、5、20)PIN(上限((bid  -  1000)/ 2000)* 10、0、20 )bid * .02 100 bid特定の値で解決すれば完了です。

たとえば、合計コストを2000ドルにしたい場合は、次のようにします。

2000 = PIN(bid×0.1、10、50)pin(上限(bid / 500)×5、5、10)PIN(上限((bid  -  1000)/ 2000)×5、0、10)入札*。 02 100入札。 入札単価は少なくとも> 1500および<2000でなければなりません。これらのPINセクションを一定にすることができるので、これはうまく機能します。

2000 = 50 10 5 100入札* 1.02 1835 =入札* 1.02入札= 1799.0196078431372549019607843137

2 Answer


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!

元の関数は厳密に増加しているので、それらの関数のうちの最大1つが許容可能な値を与えるでしょう。 しかし、いくつかの入力ではそれらのどれも良い値を与えません。 これは、元の関数がこれらの値を飛び越えるためです。

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

したがって、たとえば、「+ cost = 1182+」に対して許容可能な値を与える関数はありません。


2


`+ PIN `と ` ceiling `を使用しているため、計算を逆にする簡単な方法がわかりません。 「 bid +」の精度が固定されていると仮定すると(ドットの後ろに小数点以下2桁があると思います)、常にバイナリ検索を使用できます(関数は単調です)。

編集:それについてさらに考えた後、「+ x = bid * 1.02 + 100+」を使用して、最終コストがx + 15(排他)とx + 70(包括)の間にあることを確認しました(つまり、 + x + 15 <最終コスト<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」であることがわかります。 つまり、「最終コスト= 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」であることを意味します。 したがって、「最終コスト= 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 +`を使用します。