Code Monkey home page Code Monkey logo

Comments (8)

syspic avatar syspic commented on May 27, 2024 1

This is expected behavior, the probs must add up to 100 and need to be balanced. Its not very intuitive, but how else could it work? In truth I am planning on removing this from the sim controls, it adds little and takes up valuable ui space.

Hey! This is a super cool project! I am wondering why you think it adds little value?

I think it's really cool to play around with those values. I have a proposal:

  • Save space by having a button that says "set probabilities" or something better
  • when clicked, it opens up a popup (not a popup but i dont know the right word for this. like one of those windows) that has all 3 values
  • allow the user to put in any combo of values. Then press ok.
  • if it doesnt add to 100, dont quit and have an error that tells the user to make sure it adds up to 100

This way I can set values like 20,45,35. If i try to do that right now, it doesnt work since the other two automatically update

from lifeengine.

xkortex avatar xkortex commented on May 27, 2024 1

I also think it's pretty valuable to be able to adjust the probabilities of mutations, and was initially confused by the "whack a mole" nature of the UI. Not sure I'm sold on the "free entry and validate the sum" UI, either, I envision a 3 axis selector similar to RGB/HSV color selectors.

Though, I'm not sure why the probabilities of each need to add to 100%. Like, why does this have to be an elif switch of mutually exclusive events? Can't we just roll for each event independently, and then add/change/delete independently?

if (choice <= Hyperparams.addProb) {

else if (choice <= Hyperparams.addProb + Hyperparams.changeProb){

else if (choice <= Hyperparams.addProb + Hyperparams.changeProb + Hyperparams.removeProb){

Ahhh ok I think I see, you need to know if it's mutated to determine if it should be added to the fossil record:

if (mutated) {
FossilRecord.addSpecies(org, this.species);
}

Still, I don't quite follow why this interface mandates that the add/change/delete events must be indepenent. I guess that's just a design choice?

Side note, I think you might actually have a "bug" in the way species are determined. If you have convergent evolution (a mutation that reverses), that counts as a different species in this system... I think. I'm still reading up on the codebase.

Personally I would do immutable genes and then hash the gene to determine species uniqueness. That way if two creatures convergently evolved to the same pattern, they would still be considered the same species.

from lifeengine.

MaxRobinsonTheGreat avatar MaxRobinsonTheGreat commented on May 27, 2024 1

UPDATE: I am no longer planning on removing the feature and will improve the ui.

@xkortex Excellent suggestion, not sure why I didn't think of this. I've been wracking my brain for an intuitive way to balance the probs, but the balance is unnecessary and they can be independent mutations. Will implement.

And your point about species is a separate issue, my solution is a "good enough for now" implementation since species aren't actually used for anything other than statistics. If you'd like to continue the conversation about this, open a discussion in the the discussion tab.

Thanks all

from lifeengine.

syspic avatar syspic commented on May 27, 2024 1

@xkortex Thanks for the writeup! I am not familar with JS/UI/UX/webdesign so this was really helpful! Thank you!

And thanks @MaxRobinsonTheGreat for listening to the community feedback! It's super cool and encouraging to know that you are interested in what we have to say!

from lifeengine.

MaxRobinsonTheGreat avatar MaxRobinsonTheGreat commented on May 27, 2024

This is expected behavior, the probs must add up to 100 and need to be balanced. Its not very intuitive, but how else could it work?
In truth I am planning on removing this from the sim controls, it adds little and takes up valuable ui space.

from lifeengine.

PhoneixS avatar PhoneixS commented on May 27, 2024

You can adjust only the last/third used. For example:

  1. Start with 33% 33% 33%.
  2. Change one to 20%, adjust on the other two: 20% 33% 47%
  3. Change one of the two left to 10%, set the remainded in the third (100-20-10): 20% 10% 70%
  4. if the third also changes (50%), put the rest into the last modified: 40% 10% 50%

I think you could implement it having a list of the inputs sorted by the last edited, so when the user change one you put it at the to the front of the list, and adjust the total with the third (if it isn't enough, for example when the edit set a 100%, use the second too).

from lifeengine.

PhoneixS avatar PhoneixS commented on May 27, 2024

I have implemented a possible solution in the pull request which has into consideration the last edited input.

You can also simplify the logic by just having a predefined order, for example, you always have to edit the add input first, then the change input (limited by the remainder of 100 - addProb) and you can't change the remove input as it is calculated to the remainder of 100 - add - change clipped to 0.

from lifeengine.

xkortex avatar xkortex commented on May 27, 2024

@MaxRobinsonTheGreat I think it actually dovetails with the discussion about state.

I really think a "static genes datastructure" based approach would really pay dividends, so I'm really curious what your thoughts are on that. Just pushed some code so you have something more concrete to look at.

from lifeengine.

Related Issues (17)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.