3%
class-dependent (product-
form) model.
4% Each
class sees a service-rate scaling
beta_{i,r} that depends ONLY on its
5% own per-
class population
n_{i,r} at the station. This
is the BCMP
6% product-
form case of QD-AMVA (Casale, Perez, Wang, IFIP PERFORMANCE 2015):
7% D_{i,r}(n) = theta_{i,r} *
beta_{i,r}(
n_{i,r}). The handle returns a length-R
8% vector [
beta_{i,1}(n),
beta_{i,2}(n)], of which the solver picks class r.
9% Contrast ld_joint_dependence.m, where the scalar min(ni(1),c) reads a foreign
10% class marginal and
is therefore non-product-
form (setJointDependence).
11N = 16; % number of jobs
14cdmodel = Network(
'model');
15node{1} = Delay(cdmodel,
'Delay');
16node{2} = Queue(cdmodel,
'Queue1', SchedStrategy.PS);
17jobclass{1} = ClosedClass(cdmodel,
'Class1', N, node{1}, 0);
18jobclass{2} = ClosedClass(cdmodel,
'Class2', N/2, node{1}, 0);
19node{1}.setService(
jobclass{1}, Exp.fitMean(1.0)); % mean = 1
20node{1}.setService(
jobclass{2}, Exp.fitMean(2.0)); % mean = 2
21node{2}.setService(
jobclass{1}, Exp.fitMean(1.5)); % mean = 1.5
22node{2}.setService(
jobclass{2}, Exp.fitMean(2.5)); % mean = 2.5
23%
beta_{i,r}(
n_{i,r}): class 1 scales up to c servers with its OWN count, class
24% 2
is always single-server. Both entries read only their own marginal, so the
25% demands satisfy the product-
form recurrence. Peak rate scaling [c 1] per
26% class normalizes Util = T*S/peak.
27node{2}.setClassDependence(@(ni) [min(ni(1),c), 1], [c 1]);
29P = cdmodel.initRoutingMatrix();
30P{1,1} = cdmodel.serialRouting(node);
31P{2,2} = cdmodel.serialRouting(node);
34cdAvgTableCTMC=CTMC(cdmodel).getAvgTable
35cdAvgTableCD=MVA(cdmodel,
'method',
'qd').getAvgTable
36% JMT
is not solved here: the JSIM writer has no representation
for the
37%
class-dependence handle, so SolverJMT rejects the model rather than
38% silently solving it unscaled (see SolverJMT.getFeatureSet).
40model = cdmodel; %
for test compatibility