Parámetros: Costos
Cuánta energía le cobra la simulación a un bot por ejecutar su ADN, moverse, disparar, fabricar defensas, tener cuerpo y envejecer.
Este grupo fija el precio de cada cosa que hace un bot. Todos los precios se pagan en energía (.nrg) y son iguales para todos los bots del mundo, vegetales incluidos. Con los valores de fábrica de la app están todos en 0: vivir y actuar es gratis, y un bot solo se queda sin energía si la gasta en algo (regalarla, pasarla al cuerpo, fabricar defensas) o si se la sacan. Tocalos cuando quieras que la evolución premie a los bots ahorrativos, o cuando armes un mundo con las reglas de los torneos.
Esta página dice qué cobra cada parámetro. El mecanismo de conjunto (en qué fase del ciclo se cobra cada cosa, qué pasa si la energía queda negativa) está en Energía, cuerpo y desechos, y el detalle del ADN en Ejecución y costos.
Cómo se cobra
Cada costo se cobra como precio × Multiplicador de costos. El multiplicador vale 1 de fábrica y es la perilla general: en 0 todo es gratis aunque los precios no lo sean, en 2 todo cuesta el doble. Está en el grupo Parámetros: Costos dinámicos porque el motor lo puede mover solo para llevar la población a un objetivo.
Hay tres clases de costos:
| Clase | Cuándo se paga | Parámetros |
|---|---|---|
| Por instrucción | Cada vez que el ADN ejecuta una, en la fase del ADN. | Número a Control de flujo |
| Por acción | Cuando el bot hace algo: empujar, girar, atar, disparar, fabricar. | Cloroplasto nuevo, Mover a Disparar, Veneno a Caparazón |
| Mantenimiento | Todos los ciclos, aunque el bot no haga nada; también al reproducirse. | ADN por ciclo, Copia del ADN, Mantenimiento del cuerpo a Fracción lineal del costo por edad, Costo por edad logarítmico, Costo por edad lineal |
Los cobros no miran el saldo: la energía puede quedar negativa entre una fase y otra, y recién en las acciones se decide si el bot murió (ver Energía, cuerpo y desechos). Los cadáveres no pagan mantenimiento.
Un precio negativo, o un multiplicador negativo, convierte el costo en un pago: con el multiplicador en −1 y el store a 1, cada store le suma 1 de energía al bot. La app acepta un precio negativo con un aviso de valor poco habitual; el multiplicador negativo lo acepta sin aviso.
Los atajos: F1 y sin costos
No hace falta cargar los 26 valores a mano. En Experimentar, el modo Básico tiene el control Costos con tres opciones: F1 pone los precios de la liga, Sin costos devuelve todo a los valores de fábrica y Personalizados es lo que se ve cuando los valores no coinciden con ninguno de los otros dos (por ejemplo, porque cambiaste alguno en el modo Avanzado). En el modo avanzado, el botón Ajustes F1 y la base Liga F1 del escenario ponen los mismos precios, junto con el resto de las reglas de la liga (ver Experimentar y Experimentar: modo avanzado).
Los precios F1 son estos; todo lo demás del grupo queda en 0 (y también el ajuste dinámico):
| Parámetro | F1 |
|---|---|
| Condición | 0,004 |
| Store | 0,04 |
| Cloroplasto nuevo | 0,2 |
| Mover | 0,05 |
| Atar | 2 |
| Disparar | 2 |
| Veneno y Toxina | 0,01 |
| Baba y Caparazón | 0,1 |
| Mantenimiento del cuerpo | 0,00001 |
| Costo por edad | 0,01, casi desde que nace |
| Multiplicador de costos | 1 |
Con esos precios, lo caro es disparar y atarse; ejecutar el ADN y tener cuerpo casi no cuesta. El F1 copia al original, que ponía en 0 los costos del 1 en adelante: el de Número no lo toca, así que si lo cambiaste a mano, queda como estaba.
Número
Por cada número del ADN que se ejecuta.
- Por defecto
- 0
- Rango habitual
- 0 a 1000
- Variable
NUMCOST- Clave
cost:0- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
Se cobra por cada número que el ADN apila al ejecutarse, como 10 o .up cuando la sysvar va sin asterisco (es una dirección, o sea un número). Dentro de un gen apagado los números no se ejecutan y no cuestan. Es el costo que más crece con el largo del ADN que corre de verdad: un gen típico tiene más números que cualquier otra cosa. Ver Números y lecturas.
Lectura *.número
Por cada lectura de memoria (*.x).
- Por defecto
- 0
- Rango habitual
- 0 a 1000
- Variable
DOTNUMCOST- Clave
cost:1- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
Se cobra por cada lectura de memoria con asterisco, como *.eye5 o *50. Un bot que consulta muchos sentidos por ciclo paga uno por cada lectura, aunque lea dos veces la misma. Ver *<numero> | *.<sysvar>.
Comando básico
add, sub, mult…
- Por defecto
- 0
- Rango habitual
- 0 a 1000
- Variable
BCCMDCOST- Clave
cost:2- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
Lo paga cada operador básico ejecutado: las cuentas y el manejo de la pila, como add, mult, rnd, dup o swap. La lista completa está en Básicos.
Comando avanzado
angle, dist, sqr…
- Por defecto
- 0
- Rango habitual
- 0 a 1000
- Variable
ADCMDCOST- Clave
cost:3- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
Lo paga cada operador avanzado: trigonometría y geometría, como angle, dist, sqr o pow. debugint y debugbool son de esa familia pero no cuestan nunca. Ver Avanzados.
Comando de bits
Operaciones de bits.
- Por defecto
- 0
- Rango habitual
- 0 a 1000
- Variable
BTCMDCOST- Clave
cost:4- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
Condición
Por cada comparación.
- Por defecto
- 0
- Rango habitual
- 0 a 1000
- Variable
CONDCOST- Clave
cost:5- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
Se cobra por cada comparación, como >, = o %=. Ojo: las condiciones de un gen se evalúan siempre, porque hay que saber si el gen corre, así que este costo lo pagan también los genes que terminan apagados. Con las reglas F1 vale 0,004. Ver Comparaciones.
Lógica
and, or, not…
- Por defecto
- 0
- Rango habitual
- 0 a 1000
- Variable
LOGICCOST- Clave
cost:6- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
Lo paga cada operador lógico, los que combinan o manipulan resultados booleanos: and, or, not, dropbool y los demás de Lógicos.
Store
Por cada escritura en memoria.
- Por defecto
- 0
- Rango habitual
- 0 a 1000
- Variable
COSTSTORE- Clave
cost:7- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
Es el precio de store, la instrucción con la que el bot actúa: casi todo lo que hace pasa por un store. Las variantes pagan una fracción: inc y dec la décima parte; addstore y sus parientes, la quinta; rndstore, sgnstore y sqrstore, la séptima; absstore y negstore, la octava. Un store que no llega a escribir (por una condición en línea falsa, o a la dirección 0) no cuesta. Con las reglas F1 vale 0,04. Ver Ejecución y costos.
Cloroplasto nuevo
Por cada cloroplasto que fabrica un bot.
- Por defecto
- 0
- Rango habitual
- 0 a 1000
- Variable
CHLRCOST- Clave
cost:8- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
Se cobra por cada cloroplasto que el bot compra con .mkchlr. La compra se cancela entera si lo dejaría con menos de 100 de energía, y esa regla vale aunque el precio sea 0: un bot con 90 de energía no puede comprar ni uno. Sacarlos con .rmchlr es gratis. Con las reglas F1 vale 0,2: 1000 cloroplastos salen 200 de energía. Ver Cloroplastos y vegetales.
Control de flujo
cond, start, stop…
- Por defecto
- 0
- Rango habitual
- 0 a 1000
- Variable
FLOWCOST- Clave
cost:9- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
Lo pagan los marcadores de gen: cond, start, else y stop. Se ejecutan aunque el gen esté apagado, así que un bot con muchos genes paga este costo por cada uno en cada ciclo. Ver Flujo.
Mover
Por unidad de empuje.
- Por defecto
- 0
- Rango habitual
- 0 a 1000
- Variable
MOVECOST- Clave
cost:20- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
Es el precio de empujar con .up, .dn, .sx y .dx, por unidad de empuje. Se cobra sobre el empuje ya recortado por el tope de velocidad, así que pedir más de lo que el mundo deja no cuesta más, y nunca se cobra más energía de la que el bot tiene. En el modo estanque también se paga por mantenerse a flote. Con las reglas F1 vale 0,05. Ver Física.
Girar
Por cada 200 unidades de giro (un radián).
- Por defecto
- 0
- Rango habitual
- 0 a 1000
- Variable
TURNCOST- Clave
cost:21- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
Es el precio de girar, por cada 200 unidades de giro (unos 57 grados): un cuarto de vuelta cuesta 1,57 veces el precio y una vuelta entera, 6,28. Se paga igual girando con .aimsx, .aimdx o .setaim. Las reglas F1 no cobran el giro. Ver Física.
Atar
Por cada intento de atar, dividido por los lazos después del intento más 1. El lazo de nacimiento se lo cobra al padre.
- Por defecto
- 0
- Rango habitual
- 0 a 1000
- Variable
TIECOST- Clave
cost:22- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
Se cobra cada vez que el bot intenta atar a otro con .tie y hay alguien a tiro, salga o no el lazo. También se cobra en cada parto, por el lazo de nacimiento: lo paga el padre (en la reproducción sexual, la madre). El precio se divide por la cantidad de lazos que el bot tiene después del intento más uno, así que el primer lazo cuesta la mitad del precio, el segundo un tercio, y así; un intento que falla, sin lazos, cuesta el precio entero. Con las reglas F1 vale 2: un hijo le cuesta 1 de energía a un padre que no tenía otros lazos. Ver Lazos y multicelulares.
Disparar
Por cada disparo.
- Por defecto
- 0
- Rango habitual
- 0 a 1000
- Variable
SHOTCOST- Clave
cost:23- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
Es el precio base de un disparo con .shoot. Cuánto paga el tirador depende del tipo: los disparos para comer, el veneno y los desechos lo dividen por la cantidad de lazos más uno, los de memoria lo pagan entero y un disparo de comer con .shootval grande lo multiplica (la tabla está en Disparos). También lo pagan, sin que el bot lo pida, el disparo con el que expulsa los desechos cuando se le juntan demasiados, y el disparo de un virus (Virus). Con las reglas F1 vale 2.
ADN por ciclo
Por ciclo y por largo del ADN.
- Por defecto
- 0
- Rango habitual
- 0 a 1000
- Variable
DNACYCCOST- Clave
cost:24- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
Un costo de mantenimiento: en cada ciclo, el bot paga este precio por cada instrucción de su genoma (sin contar el end final), se ejecute o no. Es lo que castiga el ADN basura que se acumula con las mutaciones. Un ADN de 100 instrucciones más el end, con el precio en 0,01, cuesta 1 por ciclo. Ver Ejecución y costos.
Copia del ADN
Al reproducirse, por largo del ADN.
- Por defecto
- 0
- Rango habitual
- 0 a 1000
- Variable
DNACOPYCOST- Clave
cost:25- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
Se cobra al reproducirse, por cada instrucción del genoma (esta vez con el end): es el precio de copiar el ADN para el hijo. Si no le alcanza, el padre queda en 0 de energía, pero el hijo nace igual. También lo paga quien fabrica un virus, por cada palabra del gen que copia. Ver Reproducción.
Veneno
Por unidad de veneno fabricada.
- Por defecto
- 0
- Rango habitual
- 0 a 1000
- Variable
VENOMCOST- Clave
cost:26- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
Es el costo de transacción por cada unidad de veneno que el bot fabrica con .mkvenom, encima de la conversión fija (1 de energía por unidad). Lo que se paga por este costo no desaparece: se vuelve desechos (.waste). Con las reglas F1 vale 0,01. Ver Defensas.
Toxina
Por unidad de toxina fabricada.
- Por defecto
- 0
- Rango habitual
- 0 a 1000
- Variable
POISONCOST- Clave
cost:27- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
Igual que el del veneno, para la toxina que se fabrica con .mkpoison (la conversión fija es 1 de energía cada 4 unidades). El costo también se vuelve desechos. Con las reglas F1 vale 0,01. Ver Defensas.
Baba
Por unidad de baba fabricada.
- Por defecto
- 0
- Rango habitual
- 0 a 1000
- Variable
SLIMECOST- Clave
cost:28- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
El costo por unidad de baba que se fabrica con .mkslime, encima de la conversión fija (1 de energía cada 10). Se vuelve desechos. Un bot atado a otros en un multicelular paga menos: el costo se divide por la cantidad de lazos más uno, aunque los desechos se suman enteros. Con las reglas F1 vale 0,1.
Caparazón
Por unidad de caparazón fabricada.
- Por defecto
- 0
- Rango habitual
- 0 a 1000
- Variable
SHELLCOST- Clave
cost:29- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
El costo por unidad de caparazón que se fabrica con .mkshell, con las mismas reglas que la baba: conversión fija de 1 de energía cada 10, el costo se vuelve desechos y en un multicelular se divide por los lazos más uno. Con las reglas F1 vale 0,1. Ver Defensas.
Mantenimiento del cuerpo
Por ciclo y por unidad de cuerpo.
- Por defecto
- 0
- Rango habitual
- 0 a 1000
- Variable
BODYUPKEEP- Clave
cost:30- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
Mantenimiento del cuerpo: en cada ciclo, el bot paga este precio por cada punto de .body. Hace que guardar energía en el cuerpo tenga un costo. Con 0,001, un bot con 1000 de cuerpo pierde 1 por ciclo; con el valor F1 (0,00001), una centésima. Ver Energía, cuerpo y desechos.
Costo por edad
Por ciclo, a partir de la edad de inicio.
- Por defecto
- 0
- Rango habitual
- 0 a 1000
- Variable
AGECOST- Clave
cost:31- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
La cuota de vejez: lo que el bot paga por ciclo una vez que su edad pasó de la edad de inicio. Así como está es un monto fijo; con Costo por edad logarítmico o Costo por edad lineal pasa a crecer con los años. Sirve para que los bots viejos dejen lugar a sus hijos sin tener que programarles la muerte. Con las reglas F1 vale 0,01 y la edad de inicio queda en 0. Ver Muerte y cadáveres.
Edad de inicio del costo
Ciclos de vida antes de cobrar por edad.
- Por defecto
- 0
- Rango habitual
- 0 a 2147483647
- Variable
AGECOSTSTART- Clave
cost:32- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
La edad, en ciclos, a partir de la cual se cobra Costo por edad: el cobro empieza cuando la edad la supera. Con 0 (el valor de fábrica) se cobra desde el segundo ciclo de vida, porque en el primero la edad todavía es 0. Las formas logarítmica y lineal cuentan los ciclos desde esta edad, no desde el nacimiento.
Fracción lineal del costo por edad
Pendiente del costo por edad lineal.
- Por defecto
- 0
- Rango habitual
- 0 a 1000
- Variable
AGECOSTLINEARFRACTION- Clave
cost:33- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
La pendiente de la cuota de vejez lineal: cuánto se suma a Costo por edad por cada ciclo vivido después de la edad de inicio. Con el costo en 1 y la pendiente en 0,5, el bot paga 1,5 en su primer ciclo de vejez, 2 en el segundo, 2,5 en el tercero, y así. Solo cuenta si Costo por edad lineal está activado.
Costo por edad logarítmico
Crece con el logaritmo de la edad.
- Por defecto
- no
- Rango habitual
- sí / no
- Variable
AGECOSTMAKELOG- Clave
cost:51- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
Activado, la cuota de vejez es Costo por edad por el logaritmo natural de los ciclos vividos desde la edad de inicio: crece rápido al principio y después cada vez más despacio. Con el costo en 10, el bot paga 6,9 cuando lleva 2 ciclos de vejez, unos 46 a los 100 y unos 69 a los 1000. Si activás también Costo por edad lineal, gana este.
Costo por edad lineal
Crece en línea recta con la edad.
- Por defecto
- no
- Rango habitual
- sí / no
- Variable
AGECOSTMAKELINEAR- Clave
cost:60- En vivo
- se puede cambiar con la simulación corriendo
- Modo
- solo avanzado
Activado, la cuota de vejez crece en línea recta: Costo por edad más Fracción lineal del costo por edad por cada ciclo vivido desde la edad de inicio. A la larga es más dura que la logarítmica, porque no se aplana nunca. No tiene efecto si Costo por edad logarítmico también está activado.