Time Project

Xutian Liu
Data Mining the City
4 min readNov 13, 2019

Online Dating APP Simulation; by Xutian Liu

Online Dating Applications in the Market

Argument: Can social dating app control who you will fall in love with, or will the design of the app change the result who you end up with?

Types of Dating Apps:

1. Geolocation matching dating apps aggregate potential matches based on geographic proximity. (Tinder, Bumble)

2. Matching algorithm-based dating apps are powered by offline matching services or matching algorithms that base their choice on personal survey information. (eHarmony)

3. Niche dating apps target specific groups of people. (The League, The Grade)

The Poem:

Modern Love

Is it closing the gap of distance;

Or is it pulling away different people;

Maybe we are asking too much, aren’t we?

Extraction & Visualization:

(change the sequence of events)

  1. Distance-based Geolocation matching
choose the closest to date

Simulation:

Dating the Distance

2. Similarity (match or not) Matching algorithm-based

choose the similar to date

Simulation:

Dating the Similarity

3. The score, the highest score will get the chance to judge other people directly.

choose the best to date

Simulation:

Dating the Second Best First Ver.
Dating the Second Best Second Ver.

Afterthoughts:

Stable Marriage Problem
https://en.wikipedia.org/wiki/Stable_marriage_problem

Coding of Dating the Distance:

using System.Collections;using System.Collections.Generic;using UnityEngine;public class cubechase : MonoBehaviour{public float speed;public Material[] material;Renderer rend;private Transform target;private Transform home;// Start is called before the first frame updatevoid Start(){rend = GetComponent<Renderer>();rend.enabled = true;rend.sharedMaterial = material[0];target = GameObject.FindGameObjectWithTag("cubetwo").GetComponent<Transform>();home = GameObject.FindGameObjectWithTag("planeone").GetComponent<Transform>();}// Update is called once per framevoid Update(){if (Vector3.Distance(transform.position, target.position) > 1.5) {transform.position = Vector3.MoveTowards(transform.position, target.position, speed * Time.deltaTime);}if (Vector3.Distance(transform.position, target.position) < 2){rend.sharedMaterial = material[1];transform.position = Vector3.MoveTowards(transform.position, home.position, speed * Time.deltaTime);}Debug.DrawLine(transform.position, target.position, Color.red);}}

Coding of Dating the Similarity:

using System.Collections;using System.Collections.Generic;using UnityEngine;public class cubechase : MonoBehaviour{public float speed;private Transform target;private Transform home;// Start is called before the first frame updatevoid Start(){target = GameObject.FindGameObjectWithTag("cubetwo").GetComponent<Transform>();home = GameObject.FindGameObjectWithTag("planeone").GetComponent<Transform>();}// Update is called once per framevoid Update(){if (Vector3.Distance(transform.position, target.position) > 1.5) {transform.position = Vector3.MoveTowards(transform.position, target.position, speed * Time.deltaTime);}if (Vector3.Distance(transform.position, target.position) < 2){transform.position = Vector3.MoveTowards(transform.position, home.position, speed * Time.deltaTime);}}}

Coding of Dating the Second Best:

using System.Collections;using System.Collections.Generic;using UnityEngine;public class cylinderchase : MonoBehaviour{public float speed;public Material[] material;Renderer rend;
private Transform target;private Transform home;private Transform targeta;private Transform targetb;private Transform targetc;private Transform targetd;// Start is called before the first frame updatevoid Start(){rend = GetComponent<Renderer>();rend.enabled = true;rend.sharedMaterial = material[0];target = GameObject.FindGameObjectWithTag("cylindertwo").GetComponent<Transform>();home = GameObject.FindGameObjectWithTag("planefour").GetComponent<Transform>();targeta = GameObject.FindGameObjectWithTag("cube").GetComponent<Transform>();targetb = GameObject.FindGameObjectWithTag("cubetwo").GetComponent<Transform>();targetc = GameObject.FindGameObjectWithTag("sphere").GetComponent<Transform>();targetd = GameObject.FindGameObjectWithTag("spheretwo").GetComponent<Transform>();}// Update is called once per framevoid Update(){if (Vector3.Distance(targeta.position, targetb.position) > 2){transform.position = Vector3.MoveTowards(transform.position, targeta.position, speed * Time.deltaTime);Debug.DrawLine(transform.position, targeta.position, Color.blue);}if (Vector3.Distance(targeta.position, targetb.position) < 2){if (Vector3.Distance(targetc.position, targetd.position) > 2){transform.position = Vector3.MoveTowards(transform.position, targetc.position, speed * Time.deltaTime);Debug.DrawLine(transform.position, targetc.position, Color.green);}if (Vector3.Distance(targetc.position, targetd.position) < 2){if (Vector3.Distance(transform.position, target.position) > 1.5){transform.position = Vector3.MoveTowards(transform.position, target.position, speed * Time.deltaTime);}if (Vector3.Distance(transform.position, target.position) < 2){transform.position = Vector3.MoveTowards(transform.position, home.position, speed * Time.deltaTime);rend.sharedMaterial = material[1];}Debug.DrawLine(transform.position, target.position, Color.red);}}}}

--

--