@@ -79,7 +79,6 @@ class ExecuteJob {
7979 optSim->Initialize ();
8080
8181 OptimizeMPSInitialQubitsMap (optSim, dcirc, nrQubits);
82- optSim->SetUpcomingGates (dcirc->GetOperations ());
8382
8483 if (optimiseMultipleShots) {
8584 executedGates = dcirc->ExecuteNonMeasurements (optSim, state);
@@ -89,7 +88,8 @@ class ExecuteJob {
8988 optSim->SaveState ();
9089
9190 dcirc = dcirc->RemoveExecutedOperations (executedGates);
92- optSim->SetUpcomingGates (dcirc->GetOperations ());
91+ if (network->GetMPSOptimizeSwaps ())
92+ optSim->SetUpcomingGates (dcirc->GetOperations ());
9393 }
9494 }
9595
@@ -207,7 +207,6 @@ class ExecuteJob {
207207 optSim->Initialize ();
208208
209209 OptimizeMPSInitialQubitsMap (optSim, dcirc, nrQubits);
210- optSim->SetUpcomingGates (dcirc->GetOperations ());
211210
212211 if (optimiseMultipleShots) {
213212 executedGates = dcirc->ExecuteNonMeasurements (optSim, state);
@@ -216,7 +215,8 @@ class ExecuteJob {
216215 !specialOptimizationForMPS && curCnt > 1 )
217216 optSim->SaveState ();
218217 dcirc = dcirc->RemoveExecutedOperations (executedGates);
219- optSim->SetUpcomingGates (dcirc->GetOperations ());
218+ if (network->GetMPSOptimizeSwaps ())
219+ optSim->SetUpcomingGates (dcirc->GetOperations ());
220220 }
221221 } else if (executedGates.size () == dcirc->size ()) {
222222 // special case for when the simulator is passed from the network
@@ -262,7 +262,6 @@ class ExecuteJob {
262262 optSim->Initialize ();
263263
264264 OptimizeMPSInitialQubitsMap (optSim, dcirc, nrQubits);
265- optSim->SetUpcomingGates (dcirc->GetOperations ());
266265
267266 if (optimiseMultipleShots) {
268267 executedGates = dcirc->ExecuteNonMeasurements (optSim, state);
@@ -272,7 +271,8 @@ class ExecuteJob {
272271 optSim->SaveState ();
273272
274273 dcirc = dcirc->RemoveExecutedOperations (executedGates);
275- optSim->SetUpcomingGates (dcirc->GetOperations ());
274+ if (network->GetMPSOptimizeSwaps ())
275+ optSim->SetUpcomingGates (dcirc->GetOperations ());
276276 }
277277 }
278278
@@ -374,16 +374,15 @@ class ExecuteJob {
374374 Simulators::MPSDummySimulator dummySim (nrQubits);
375375 if (!maxBondDim.empty ())
376376 dummySim.SetMaxBondDimension (maxBondDimValue);
377- const auto optimalMap = dummySim. ComputeOptimalQubitsMap (layers);
378-
379- if (network-> GetInitialQubitsMapOptimization ())
377+
378+ if (network-> GetInitialQubitsMapOptimization ()) {
379+ const auto optimalMap = dummySim. ComputeOptimalQubitsMap (layers);
380380 sim->SetInitialQubitsMap (optimalMap);
381+ }
381382
382383 dcirc = Circuits::Circuit<Time>::LayersToCircuit (layers);
383384
384385 if (network->GetMPSOptimizeSwaps ()) {
385- sim->SetUpcomingGates (dcirc->GetOperations ());
386-
387386 // TODO: come up with something better!
388387 int lookaheadVal = nrQubits;
389388 if (nrQubits > 15 ) lookaheadVal = 15 ;
@@ -399,8 +398,11 @@ class ExecuteJob {
399398 ? lookaheadDepth - 1
400399 : lookaheadDepth - 2 ;
401400
401+ sim->SetUseOptimalMeetingPosition (true );
402402 sim->SetLookaheadDepth (lookaheadDepth);
403403 sim->SetLookaheadDepthWithHeuristic (lookaheadHeuristicDepth);
404+
405+ sim->SetUpcomingGates (dcirc->GetOperations ());
404406 }
405407 }
406408 }
0 commit comments