Dot indexing is not supported for variables of this type on a parfor line with no dot indexing.
12 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
I have been scratching my head for multiple hours on this one. In evaluation.m, I get an error "Dot indexing is not supported for variables of this type" on line 32, which contains "parfor i = 1:x1". There is absolutely zero dot indexing in this line, and the code runs fine when replacing "parfor" with "for". I want to use parfor because this will significantly speed up the runtime of the code (which takes hours or days).
What is going on, and how can I fix this?
function [Y, g, avgFullTravelTime, scoreFactor]=evaluation(P, numInputs)
% P = population
[x1, y1]=size(P);
H=zeros(1,x1);
Vissim = actxserver('Vissim.Vissim');
path = 'C:\Users\Public\Documents\PTV Vision\PTV Vissim 2022\Pitt Campus\Calibration Network with slopes';
filename = fullfile(path, 'Pitt_Campus_Model_1-6-23(new).inpx');
Vissim.LoadNet(filename, false);
expectedTime = [346,393,479,451,462,494,260,388,145,297,422,311];
measureRange = [48, 49, 50, 52, 54, 57, 59, 61, 65, 66, 67, 68, 69];
% NumberRoute [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
routes = length(expectedTime);
segments = 21;
score = zeros(x1);
scoreFactor = zeros(x1, routes);
avgFullTravelTime = zeros(x1, routes);
g = zeros(x1, routes);
totalTravelTime = zeros(x1, segments);
vehsPerTimeInt = zeros(x1, segments, 3);
avgTTPerTimeInt = zeros(x1, segments, 3);
avgTravelTime = zeros(x1, segments);
for w = 1:segments
Veh_TT_measurement(w) = Vissim.Net.VehicleTravelTimeMeasurements.ItemByKey(w+47);
end
parfor i = 1:x1
tic
vpti1 = zeros(segments, 3);
attpti1 = zeros(segments, 3);
ttt1 = zeros(segments);
tv1 = zeros(segments);
att1 = zeros(segments);
aftt1 = zeros(routes);
g1 = zeros(routes);
sf1 = zeros(routes);
% rest of code
end
2 Kommentare
Antworten (2)
Raymond Norris
am 14 Jun. 2023
My guess is that it has to do with your ActiveX Server, specifically if Veh_TT_measurement is used in your parfor. See if this will help
4 Kommentare
Edric Ellis
am 14 Jun. 2023
Verschoben: Image Analyst
am 14 Jun. 2023
Unfortunately, error messages from anywhere within a parfor loop are reported as occurring on the line where the loop starts. This is a current limitation of the way parfor works. As a workaround, if you put the entire body of the loop into a separate function, you'll get a more sensible error message.
Almost certainly as @Raymond Norris suggests it is to do with the ActiveX object - if this cannot be saved and loaded correctly, it may show up having the value [] inside the parfor loop, and then you'll end up with the error you posted when you try to apply a dot-reference to it.
3 Kommentare
Raymond Norris
am 15 Jun. 2023
parfor won't display the error dialog box. I expect this would hang the MATLAB client.
Edric Ellis
am 16 Jun. 2023
Yeah, better to do
assert(~isempty(Vissim), 'Vissim is empty!')
Siehe auch
Kategorien
Mehr zu Calendar finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!