2013-06-15 5 views
3
내가 오늘 수동으로 수행하고 프로세스를 자동화하는 프로그램을 만들

에 의해 두 개체 사이의 일치 비율을 얻을. 이 솔루션은 쉽게 난 그냥 누군가가 이미 생각을 확신하기 때문에 내 문제를 위해 특별히 새로운 알고리즘에 대해 생각하고 싶지 않은 것 같다 경우 나는 죄송합니다. 내 시나리오는 이것이다 : 내가 일자리를 찾고있는 후보 목록이 내가 작업 목록을 가지고있다. 각 후보자를 위해 나는 그가 찾고있는 직업의 다음 요구 사항을 안다. 같은 :매개 변수

  1. 급여
  2. 수동 과정에서 작업
  3. 회사의 크기 (빅/소)

  • 위치 내가 뭘하는 작업의에 그 후보의 요구 사항 매개 변수 사이에 일치하는 것입니다 요구 사항 매개 변수와 후보자에게 맞는 것으로 보이는 작업을 "반환"합니다 (완전 일치 일 필요는 없습니다). 물론 후보자의 요구 사항이 "갖기 좋은"또는 "있어야 함"을 고려하고 있습니다.

    나는 각 작업에 대한 각 후보 사이에 맞게 비율을 반환하는 알고리즘을 찾고 있어요. 누군가가 이와 같은 알고리즘의 일치 이름을 가리킬 수 있습니까?

  • +1

    할당 포인트는 모든 포인트 격차의 합을 달성 가능한 점수의 총 수를 기준으로 경기가 고려되어야 할 점수의 임계 값을 결정하십시오. Papa New Guinea에있는 직업의 경우 "미국 내에 위치해야합니다."와 같은 거래 차단기 상황의 경우, (-10000과 같은 의미의) 매우 작은 음수 값을 추가하기 만하면에 기여하는 양의 값이 취소됩니다 점수가 합격점보다 낮게 유지되도록 전체 점수. –

    답변

    2

    내 조언

    덕분에 3 차원 공간에 벡터에있는 모든 개체를 변환 한 후 두 벡터 (객체) 사이의 Euclidean distance을 찾는 것입니다. 우선

    • 각각 급여, 위치 및 크기 X 에, Y 및Z 축에 할당한다.
    • 나서 축 [0, 1] 간격 속성 매핑. 당신의 분 급여은 1'000이며, 최대 급여가 10'000 경우

    예를 들어, 당신은지도 것 :

    • $ 1'000 -> 0을 X에
    • $ 10'000 - X 축> 1.

    매핑 위치는 어렵지만, 이제 당신이지도 그리드가 있다고, 당신은 지리적 위치에 따라 그리드의 각 패치에 값을 할당 할 수 있습니다 - 가까운 사람이 유사한 값이 있습니다. 예를 들어, 미국의 상태는 좋은 예를 우리에게 제공 :

    • 뉴욕 ->에 1.0 Y 축,
    • 뉴저지 - 에> 0.99 Y 축,
    • .. .
    • 캘리포니아 ->y 축의> 0.1

    지도 회사는 같은 뭔가 크기 :

    • 시작 - Z 축> 0.2,
    • ...
    • 다국적 - Z에> 1.0 축. 는 9.000의 급여, 뉴욕에서 일자리를 원하고, 신생 기업에서 일하기 원하는 원 : 그래서

    는, 예를 제공합니다. 그의 3D 공간에서의 벡터는 [0.82, 1.00, 0.1]이 될 것입니다. 피터은 5.500의 급여를 원하고 뉴저지에서 일하기를 원하며 정말로 큰 회사 인 [0.5, 0.99, 0.8]에서 일하고 싶어합니다. 그리고 마침내, 마이크는 8.000의 급여, 캘리포니아에서의 일자리, 신생 회사도 원합니다 - [0.73, 0.1, 0.1]. 3D 공간에서 유클리드 거리 공식에 따르면

    :

    d(a, b) = sqrt((a1-b1)^2 + (a2-b2)^2 + (a3 - b3)^2) 
    
    Distance between John and Peter is: d(J, P) = 0.77 
    Distance between John and Mike is: d(J, M) = 0.90 
    

    그래서 결론은 요한과 베드로가 요한과 마이크보다 가까운 있다는 것이다.

    당신이 할 수있는 한 가지 더 각 일부 상수 가지고있다

    당신이 뭔가 할 수있는 공식에서 (위치, 예를 들어, 회사의 크기보다 더 중요하다)의 중요성을 수 있도록 강조 축 :

    을 거리가 0
    d(a, b) = sqrt((a1-b1)^2 + (C*a2 - C*b2)^2 + (a3 - b3)^2), where C = 10 
    
    0
    similiarity(A,B) = 1/(1 + (distance(A,B)/unit)) 
    

    케이스 :

    similarity(A,A) 
    = 1/(1 + (distance(A,A)/unit)) 
    = 1/(1 + (0/unit)) 
    = 1/(1 + 0) 
    = 1.0 
    ~ 100 % 
    

    케이스 거리에 유한 :

    similarity(A,Z) 
    = 1/(1 + (distance(A,Z)/unit)) 
    = 1/(1 + (infinity/unit)) 
    = 1/infinity 
    = 0.0 
    ~ 0 % 
    

    코드 :

    JobComparison* compare (Job a, Job b) 
    { 
    
        // define units based on measurement 
        double unit1 = 1000.0; 
        double unit2 = 100.0; 
        double unit3 = 10.0; 
    
        // calculate distance 
        double d1 = abs(a.salary - b.salary); 
        double d2 = distance(a.location, b.location); 
        double d3 = abs(a.companySize - b.companySize); 
    
        // calculate similiarity 
        double p1 = 1/(1 + (d1/unit1)); 
        double p2 = 1/(1 + (d2/unit2)); 
        double p3 = 1/(1 + (d3/unit3)); 
    
        return new JobCompare(p1, p2, p3); 
    
    } 
    

    public class JobCompare 
    { 
        public: 
        double salarySimiliarity; 
        double locationSimiliarity; 
        double companySimiliarity; 
    } 
    
    public class Job 
    { 
        public: 
        double salary; 
        Location location; 
        double companySize; 
    } 
    
    당신이 지금 손으로 사용하는 어떤 규모에 따라 맞춤 매개 변수