Pregunta

en otro post, MSN me dio una buena guía en la solución de mi problema de álgebra (El cálculo del precio de la oferta de costo total).Ahora, a pesar de que yo puede calcular a mano, estoy completamente atascado en la forma de escribir esto en pseudocódigo o código.Alguien me podría dar una rápida pista?Por cierto, quiero calcular la oferta dado que los gastos finales .

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
¿Fue útil?

Solución

La función se simplifica a:

                  / 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

Si considera cada pieza como una función separada, pueden invertirse:

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

Si conecta su costo en cada función, obtiene un valor de oferta estimado para ese rango. Debe verificar que este valor esté dentro del rango válido de las funciones.

Ejemplo:

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!

Dado que la función original está aumentando estrictamente, a lo sumo una de esas funciones dará un valor aceptable. Pero para algunas entradas, ninguna de ellas dará un buen valor. Esto se debe a que la función original salta sobre esos valores.

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

Por lo tanto, ninguna función dará un valor aceptable para cost = 1182 por ejemplo.

Otros consejos

Debido a la utilización de PIN y ceiling, No veo una manera fácil de invertir el cálculo.Suponiendo que bid tiene una precisión fija (supongo dos decimales detrás del punto) siempre se puede utilizar una búsqueda binaria (como las funciones monótonas).

Editar:Después de pensarlo un poco más, he observado que, teniendo x = bid*1.02 + 100, tenemos que los costos finales son entre x+15 (exclusivo) x+70 (incluido) (es decir, x+15 < final cost < x+70).Dado el tamaño de este rango (70-15=55) y el hecho de que los valores especiales (ver nota abajo) para bid son todos más aparte de esto, usted puede tomar x+15 = final cost y x+70 = final cost, de obtener el derecho de casos y/o valores de uso y los costes añadidos y simplemente resolver la ecuación (que ya no tiene PIN o ceiling en el mismo).

Para ilustrar, dejar que el coste final se 222.De x+15 = 222 de ello se sigue que bid = 107/1.02 = 104.90.Entonces tenemos que el uso de los costos están dados por bid*0.1 y que los costos adicionales son 5.En otras palabras, obtenemos final cost = bid*0.1 + bid*0.02 + 5 + 100 + bid = bid*1.12 + 105 y por lo tanto bid = (222-105)/1.12 = 104.46.Como este valor de bid significa el derecho de los valores de uso y los costos adicionales fueron tomadas, sabemos que esta es la solución.

Sin embargo, si nos hubiese mirado x+70 = 222, obtendríamos el siguiente.Primero obtenemos que para este supuesto de que bid = 52/1.02 = 50.98.Esto significa que los costos de uso son 10 y los gastos adicionales que se 5.Así, obtenemos final costs = 10 + bid*0.02 + 5 + 100 + bid = bid*1.02 + 115 y por lo tanto bid = (222-115)/1.02 = 104.90.Pero si bid es 104.90 a continuación, el uso de los costos no son 10 pero bid*0.1, así que esto no es la solución correcta.

Espero que os he explicado con suficiente claridad.Si no, por favor hágamelo saber.

N. B.:Con valores especiales me refiero a aquellos para los que la función de definir los valores de uso y los costos de cambio.Por ejemplo, para el coste de utilización, estos valores son 100 y 500:a continuación 100 utiliza 10, por encima de 500 utiliza 50 y en el medio se utiliza bid*0.1.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top