Facebook
From Colossal Mousedeer, 5 Years ago, written in Plain Text.
This paste is a reply to Untitled from Gray Terrapin - go back
Embed
Viewing differences between Untitled and Re: Untitled
MODEL:
SETS:
        PERSON /P1..P4/ : SEX, ORIENTATION, EDUCATION, AGE;
        RELATION(PERSON, PERSON) : X, AD, ED, MATCH, Q;
ENDSETS

[OBJ] MIN = @MAX(RELATION(I, J): Q(I, J) * X(I, J)) + @SUM(RELATION(I, J): Q(I, J) * X(I, J));

@FOR(RELATION: @BIN(X));

@FOR(PERSON(I):
        @SUM(PERSON(J): X(I, J)) = 1);

@FOR(PERSON(I):
        X(I, I) = 0);


DATA:
        SEX = 0, 1, 0, 1; !0 - WOMAN, 1 - MAN;
        ORIENTATION = 1, 1, 0, 0; !0 - HETERO, 1 - HOMO;
        EDUCATION = 2, 3, 3, 1;
        AGE = 18, 21, 24, 27;
ENDDATA

CALC:
        @FOR(RELATION(I, J):
                AD(I, J) = @ABS(AGE(I) - AGE(J)));

        @FOR(RELATION(I, J):
                ED(I, J) = @ABS(EDUCATION(I) - EDUCATION(J)));

        @FOR(RELATION(I, J) | (SEX(I) #NE# SEX(J)) #AND# (ORIENTATION(I) #EQ# 0 #OR# ORIENTATION(J) #EQ# 0):
                MATCH(I, J) = 0);

        @FOR(RELATION(I, J) | (SEX(I) #EQ# SEX(J)) #AND# (ORIENTATION(I) #EQ# 1 #OR# ORIENTATION(J) #EQ# 1):
                MATCH(I, J) = 0);

        @FOR(RELATION(I, J) | #NOT#((SEX(I) #NE# SEX(J)) #AND# (ORIENTATION(I) #EQ# 0 #OR# ORIENTATION(J) #EQ# 0)):
                MATCH(I, J) = 5);

        @FOR(RELATION(I, J) | #NOT#((SEX(I) #EQ# SEX(J)) #AND# (ORIENTATION(I) #EQ# 1 #OR# ORIENTATION(J) #EQ# 1)):
                MATCH(I, J) = 5);

        @FOR(RELATION(I, J):
                Q(I, J) = MATCH(I, J) + AD(I, J) + ED(I, J));
ENDCALC

@FOR(PERSON(I):
        @FOR(PERSON(J): 
                X(I,J) = X(J,I)));

END