3

今日手動で行っているプロセスを自動化するプログラムを作成したいと考えています。解決策が簡単に思える場合は申し訳ありませんが、誰かがすでに考えていると確信しているため、私の問題のために特別に新しいアルゴリズムについて考えたくありません。私のシナリオは次のとおりです。仕事を探している候補者リストがあり、仕事のリストがあります。各候補者について、彼が探している仕事の次の要件を知っています。お気に入り:

  1. 給料
  2. 仕事の場所
  3. 会社規模(大・小)

手動プロセスでは、これらの候補者の要件パラメーターとジョブの要件パラメーターを一致させ、候補者に適合すると思われるジョブを「返す」ことです (完全に一致する必要はありません)。もちろん、候補者の要件は「あると便利」または「必須」であると考えています。

各候補者と各仕事の適合率を返すアルゴリズムを探しています。このようなマッチングアルゴリズムの名前を教えてください。

ありがとう

4

2 に答える 2

2

私のアドバイスは、すべてのオブジェクトを3 次元空間のベクトルに変換してから、2 つのベクトル (オブジェクト) 間のユークリッド距離を見つけることです。

  • まず、salarylocationsizeをそれぞれx軸、y軸、z軸に割り当てます。
  • 次に、プロパティを[0, 1]軸の間隔にマップします。

たとえば、最低給与が 1,000 で、最高給与が 10,000 の場合、次のようにマッピングします。

  • $ 1'000 -> x軸の 0、
  • $ 10'000 -> x軸で 1 に。

位置をマッピングするのは難しいですが、マップ グリッドがあり、地理的位置に応じてグリッドの各パッチに値を割り当てるとします。近いものは同様の値になります。たとえば、米国の州は良い例を提供してくれます。

  • ニューヨーク -> y軸で 1.0、
  • ニュージャージー -> y軸で 0.99、
  • ...
  • カリフォルニア -> 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

したがって、ジョンとピーターはジョンとマイクよりも近いという結論になります。

もう1つできることは、各軸にいくつかの定数を導入して、その重要性を強調することです(たとえば、会社の規模よりも場所が重要です)。式では次のようにすることができます。

d(a, b) = sqrt((a1-b1)^2 + (C*a2 - C*b2)^2 + (a3 - b3)^2), where C = 10
于 2013-06-15T14:13:55.387 に答える
0
similiarity(A,B) = 1 / (1 + (distance(A,B) / unit))

距離が 0 の場合:

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;
}
于 2013-06-16T05:44:46.820 に答える