wish_C

asked on

# Positions of Selected Individuals different from thier original position

Am trying to plot the selected individual in This Code and the code for selecting the top individuals in the population is this:

but anytime i look at the plot of the initial population and the selected population, i.e plot for pop and top_x, they look different. The position of the selected ones are different from their position in the initial population. Why is this happening. The concern code is in ID: 39196865.

The plot are outside the loop.

The code for the two plots are here:

`top_x = pop(b(1:options.topSize),:)`

The code for Generating the initial population is This:
```
M = 50; % population size
n = 2;
pop = -50 + 100.*rand(M,n);
```

. This is done in a for loop. See Here for the entire code but anytime i look at the plot of the initial population and the selected population, i.e plot for pop and top_x, they look different. The position of the selected ones are different from their position in the initial population. Why is this happening. The concern code is in ID: 39196865.

The plot are outside the loop.

The code for the two plots are here:

```
figure;
scatter(pop(:,1), pop(:,2), 'x'); and
figure;
scatter(top_x(:,1),top_x(:,2), 'x');
```

ASKER

Yes you are right, TommySzalapski, Now am able to correct the position issue, but the selected individuals are not correct. I need to select points that have best fitness values, but the above code is just selecting points randomly. How can i select points with the best fitness values according to the fitness evaluation.

ASKER

Best Fitness values are selected base on the eval. That is why i am sorting eval in descending order and select the top 25% as the best individuals. Any help please?

Note that sort can optionally return the order it sorted by so you can use that for the other array.

Try something like this:

[SortIndex, b] = sort(eval, 'descend');

pop = pop(SortIndex)

Try something like this:

[SortIndex, b] = sort(eval, 'descend');

pop = pop(SortIndex)

ASKER

I have modified This part of the code to include your suggestion:

but it gives the the following error:

Its seems i am indexing into a matrix or vector using a set of indices that include a number that is not a positive integer or a logical value. when i use

It gives me another error Thus:

Any idea to solve this?

```
% Criteria for selecting top 'topSize' individuals based on fitness
% values(eval)
if strcmp(options.optmType, 'min')
[void, b] = sort(eval, 'descend'); % maximising
else
[void, b] = sort(eval, 'ascend'); % minimising
end
pop = pop(void);
top_x = pop(b(1:options.topSize),:); % select top individuals
optm_x = pop(b(1),:); % save optimal parameter
fv = eval(b(1)); % save optimal func. value
```

but it gives the the following error:

Subscript indices must either be real positive integers or logicals.

Error in ==> Imp

pop = pop(void);

Its seems i am indexing into a matrix or vector using a set of indices that include a number that is not a positive integer or a logical value. when i use

```
void = round(void)
pop = pop(void)
```

It gives me another error Thus:

??? Index exceeds matrix dimensions.

Error in ==> Imp at

pop = pop(void);

Any idea to solve this?

Sorry. I tried to post a comment, but it must not have gotten through.

What are the values of pop, eval, and void? (set M to something low like 10 please).

You may need to just use a for loop to swap all the values around.

What are the values of pop, eval, and void? (set M to something low like 10 please).

You may need to just use a for loop to swap all the values around.

ASKER

Actually i am using a for loop as you can see in the whole code here Here. I have fix the position issue, the problem is i have calculated the mean and covariance of the top_x (top 25% selected) and sample them again with the same size M as shown here:

Now i want to plot the result of this sample. Any idea?

` pop = mvnrnd(mu,Sigma,M)`

Now i want to plot the result of this sample. Any idea?

ASKER CERTIFIED SOLUTION

membership

Create an account to see this answer

Signing up is free. No credit card required.

Did my comments not help at all? You can accept multiple comments if something I did helped you figure it out.

Sorry that line didn't work, I must have a different version of MATLAB.

Sorry that line didn't work, I must have a different version of MATLAB.

ASKER

I solve the problem by myself.

Does that seem correct?