Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Difference compared to Bio_IK #67

Open
v-wewei opened this issue Jan 5, 2024 · 3 comments
Open

Difference compared to Bio_IK #67

v-wewei opened this issue Jan 5, 2024 · 3 comments

Comments

@v-wewei
Copy link

v-wewei commented Jan 5, 2024

Dear author, I want to know the main difference or advantage of pick_ik compared to bio_ik solver, since bio_ik seems support more goal function than pick_ik.

@sea-bass
Copy link
Collaborator

sea-bass commented Jan 5, 2024

pick_ik is meant to be a reimplementation of bio_ik that is more readable and well-tested.

Right now, there are two big differences:

  1. As you pointed out, we are still developing more cost functions in pick_ik, which @Robotawi has been looking at, but anyone is open to contribute!
  2. There is a big performance difference pointed out in pick_ik is 10x slower than bio_ik #60. We know what the solution is here, but we need to also do the work here to implement it.

Overall, I would recommend using bio_ik today because it is more fully featured, but if you are interested in helping address either of the two gaps pointed out above, that would be great!

@timonegk
Copy link
Contributor

I would like to add that there are some additional algorithmic differences compared to BioIK.
First, it is important to note that the BioIK algorithm implemented here is the algorithm from the paper linked in the README, not the default bio2_memetic algorithm from the linked bio_ik repository. The BioIK (1) algorithm can be used by setting the mode to bio1. The PickIK algorithm is based on the BioIK 1 algorithm with the following changes:

  • For exploitation, gradient descent with linear step size estimation (as in bio2_memetic_l) is done instead of using L-BFGS-B.
  • During reproduction, only elites are used as parents and they are selected uniformly. Originally, all individuals are considered parents, and their choice is weighted by their rank.
  • After recombination, the gradient is set to zero instead of a random mixture of the parent gradients.
  • No adoption is performed.
  • In the wipeout check, only the best solution is considered when the iteration is checked for improvement instead of all elites.
  • Wipeout completely resets the population instead of keeping the best solution.

As I am not associated with this project and only doing some research for my Master's thesis, I don't know whether these changes were made on purpose or not. Maybe @sea-bass or @tylerjw can give some insights.
I also do not understand the claim "Reimplementation of the memetic solver (equivalent to bio1 and bio2_memetic solvers)" in the README as the two algorithms are significantly different.

@sea-bass
Copy link
Collaborator

@timonegk I can only speak for myself, but the intention of this repo was not to recreate BioIK 1:1. Rather, it was to take the general approach and reimplement it in a single, configurable solver with code that is easier to understand and better tested.

But, in practice these evolutionary algorithm solvers are very inefficient and only useful in specific situations. So we're not really developing this further.

In fact, there has recently been talk of archiving this repo... unless someone else is interested in using/ maintaining it?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants