How to edit the name of a variable which is an object of a class?
6 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hello All,
I am working on a multi-agent model predictive control problem.
For each agent, I have a separate subclass and superclass, e.g., for 3 agents, I have 3 pairs of classes. I should mention that I have a separate mfile for each class.
In this multi-agent system, agents need to communicate with each and update certain properties after communication. What I need to do is to update these properties in the loop.
After searching online, this question thread was the best thing I could find but I do not know how to use it for the properties of a class.
Here is a minimal demonstration of what I need to do:
In the following code, we have 3 agents that need to communicate with each other. In each time instance, only two agents communicate with each other.
Gridsys1, GridSys2, and GridSys3 are instances of three classes that contain the system information for each agent. I need to update the properties neighbor_ID and neighbor_Y for every two agents that are communicating (agent i and agent j according to the code).
I would appreciate it if you can help me change the following code such that I can use the generic identifiers i and j in updating the properties of every two classes corresponding to agent i and j.
EDIT:
More clealry, I need to be able to change GridSys1.neighbor_ID to GridSysi.neighbor_ID (the subclass related to agent i) and change GridSys2.neighbor_ID to GridSysj.neighbor_ID (the subclass related to agent j). Also, I need to change the numbers in ID2 to IDj (the variable related to agent j), and so on.
I need to add that ID2, ID1, Y_noisy_2 and Y_noisy_1 are outputs of the following optimizer objects.
[GridSys1, ID1, y1, Zeta1, Y_act1, S_hat1,S1, Y_noisy_1, it1, U1] = GridSys1.apply_input();
[GridSys2, ID2, y2, Zeta2, Y_act2, S_hat2,S2, Y_noisy_2, it2, U2] = GridSys2.apply_input();
[GridSys2, ID3, y3, Zeta3, Y_act3, S_hat3,S3, Y_noisy_3, it3, U3] = GridSys2.apply_input();
for i = 1:3
neighbors = find(A(i,:)==1) % A is the adjacny matrix of the multi-agent system to find the neighbors of agent i
neighbors = neighbors(~ismember(neighbors, i))
for j = 1: length(neighbors) % here agent i communicates with agent j
GridSys1.neighbor_ID = ID2;
GridSys2.neighbor_ID = ID1;
GridSys1.neighbor_Y = Y_noisy_2;
GridSys2.neighbor_Y = Y_noisy_1;
[GridSys1, status1] = GridSys1.compute_input(controller1);
[GridSys2, status2] = GridSys2.compute_input(controller2);
[GridSys3, status3] = GridSys3.compute_input(controller3);
end
end
Réponse acceptée
Matt J
le 20 Sep 2022
Modifié(e) : Matt J
le 21 Sep 2022
This might be what you want.
obj={GridSys1,GridSys2,GridSys3}; %list of objects
[I,J]=find(A.*(1-eye(size(A))));
K=numel(I);
for k=1:K
[i,j]=deal(I(k),J(k)]); %the k-th pair
[obj{i}, ID1, y1, Zeta1, Y_act1, S_hat1,S1, Y_noisy_1, it1, U1] = obj{i}.apply_input();
[obj{j}, ID2, y2, Zeta2, Y_act2, S_hat2,S2, Y_noisy_2, it2, U2] = obj{j}.apply_input();
obj{i}.neighbor_ID = ID2;
obj{j}.neighbor_ID = ID1;
obj{i}.neighbor_Y = Y_noisy_2;
obj{j}.neighbor_Y = Y_noisy_1;
end
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Construct and Work with Object Arrays dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!