CAREER PLAN TRACKER
A Project
Presented to the faculty of the Department of Compute Science
California State University, Sacramento
Submitted in partial satisfaction of
the requirements for the degree of
MASTER OF SCIENCE in
Computer Science by
Aditya Hiran Pilla
SPRING
2014
© 2014
Aditya Hiran Pilla
ALL RIGHTS RESERVED ii
CAREER PLAN TRACKER
A Project by
Aditya Hiran Pilla
Approved by:
__________________________________, Committee Chair
V. Scott Gordon, Ph.D.
__________________________________, Second Reader
Bob Buckley, MS.
__________________________________, Third Reader
Cici Mattiuzi
____________________________
Date iii
Student: Aditya Hiran Pilla
I certify that this student has met the requirements for format contained in the University format manual, and that this project is suitable for shelving in the Library and credit is to be awarded for the project.
________ __________________, Graduate Coordinator
Nik rouz Faroughi, Ph.D.
Department of Computer Science
___________________
Date iv
Abstract of
CAREER PLAN TRACKER by
Aditya Hiran Pilla
The prime objective of the Career Plan Tracker is to build a career plan that recommends career tasks given in the career-counseling framework called "The Serious Job Seeker". A unique career plan is generated for each individual user based on the individual user's skill set, personality type and background.
A prominent part of the career plan includes recommendations of career task times for each recommended career task. Moreover, the Career Plan Tracker takes into account the various time restrictions the user may have in his life and generates a career plan for a schedule that is shorter than the recommended ideal schedule. For instance, the ideal schedule to complete the career acquisition process may require three to six months. Nevertheless, if a user has only two months, the user can still have a career plan built for just two months without losing much of the user’s chances in succeeding through the career acquisition process. The Career Plan Tracker categorizes this problem as a multi-objective optimization problem and uses a meta-heuristic algorithm called Simulated Annealing to solve it. v
The Career Plan Tracker is an android application developed for android devices. The backend of the application is hosted on a cloud service called Parse. With the permission of the instructors, this application is developed with the intent of publishing it in the Google play store.
_______________________, Committee Chair
V. Scott Gordon, Ph.D.
_______________________
Date vi
ACKNOWLEDGEMENTS
I am thankful to my parents and their guidance in every aspect of my life. The formulation of the project idea has been influenced greatly from their ideology. I would also like to thank my friends who have helped implement the features I wished to include in my application. Last but not the least, I am very grateful to my project advisors who have constantly been my motivation in the completion of the project. vii
TABLE OF CONTENTS
Page
Chapter
1.
2.
2.1.6 Understanding the Skills/Options of the Job Seeker that Speeds up the Career
2.1.7 Multiple Objectives for Building an Optimized Schedule Recommendation for the
viii
4. SETTING UP THE DEVELOPMENT ENVIRONMENT ....................................................... 23
ix
7.1 Case study: Computing the Schedule Recommendation for a Sample Job seeker ............. 34
7.1.1 The Career Plan Tracker’s way of Building a Schedule Recommendation
x
Tables
LIST OF TABLES
Page
1. Input #1 - Jobseeker's Persona....................................................................................................37
2. Input #2 - A fixed constant Ideal Schedule.................................................................................38
3. Start solution for Simulated Annealing.......................................................................................38
4. Input #3.a. - History data of successful jobseekers having writing skills...................................39
5. Input #3.b. - History data of successful jobseekers having reading skills..................................39
6. Input #3.c - History data of successful jobseekers having socializing skills..............................40
7. Input #4 - History data of successful jobseekers having Artistic personality type.....................40
8. Initial configuration of the Simulated Annealing algorithm.......................................................40
9. Output Schedule Recommendation.............................................................................................41 xi
LIST OF FIGURES
Figures Page
1. Overview of the interaction between Android and the Parse Cloud.............................................5
2. Use-case diagram for the Career Plan Tracker...........................................................................30
3. ER diagram for the server-side data............................................................................................35
4. ER diagram for the client-side data.............................................................................................36
5. Comparison of profits for the two Career Schedules..................................................................42
6. Task-wise comparison between the two Career Schedules........................................................44
xii
1
Chapter 1
INTRODUCTION
1.1 Background
The Career Plan Tracker tries to mimic a real-time career counselor and provides the right guidance required in the job search process.
It is a portable tool designed and developed to fit the needs of a job seeker. To achieve this specification, it is developed as a mobile application on the Android platform. It is important to remove the restrictions imposed by space to cater to the spontaneous needs of a job seeker. The optimality intended to be achieved through this mobile application remains the prime focus in its development.
The recommendation system built into the Career Plan Tracker helps in generating personalized schedules appropriate for each user. The recommendations are primarily based on the user’s profile and the history of all the users who have similar profiles to the user in the present context.
The Career Plan Tracker in its attempt to bridge the gap between career counseling and the job seekers tries to recommend schedules according to the time requirements of the job seeker. For example, a student who is about to graduate in a few days may not have all the time required for an ideal job search process. In a common scenario like this, the Career Plan Tracker can be quite helpful. The application understands the pressure and complication of the scenario and generates an optimal schedule recommendation to minimize the loss of a shortened career acquisition process. Such a recommendation can be motivating for any serious job seeker to pursue the job search more diligently.
2
1.2 Scope
The model developed by the Career Plan Tracker to mimic a real time career counselor has been an experimental attempt to gain an insight into the career acquisition process and the factors that play an important role in building an effective schedule recommendation for the career acquisition process. As a part of the enhancement, it also aims at providing extensive motivation to the job seekers as they progress along their career acquisition process.
The recommendation system of the Career Plan Tracker looks at this as an optimization problem to compress the job search schedules to fit the time requirements without compromising much on the gains of the ideal career acquisition process. This could be achieved only when the generated schedule recommends a tight schedule that can motivate the job seeker closely. Presently, it is developed to have its optimization concentrated upon six factors namely,
1.
Desired time: It is defined as the time that the job seeker intends to complete the whole career acquisition process.
2.
Motivation: The schedule depends on the level of motivation/desperation in the job seeker. This factor usually depends on some kind of a driving force from the job seeker’s background. For example, financial problems in a family or a relationship can lead to an intense motivation in the job seeker. Other examples include job seekers having babies or college age children back at home. The recommendation provided by the Career Plan
Tracker should be complementing any such a scenario.
3.
Personality type: The time duration for completing the career acquisition process may also depend on the personality type of the job seeker. This factor is taken into consideration by storing the time durations of the tasks involved in the career acquisition process. This history of successful job seekers is mapped with the personality types of the
3 job seekers. The personality types considered in this factor springs from a well-known categorization called the Holland Personality Types.
4.
Skills: Some skills have been identified which aid the pace of the career acquisition process. The recommendation system understands this and keeps track of the time durations of the career acquisition process for the job seekers possessing these skills in the past. This is done in the exact similar way as it was done for the personality types discussed above.
5.
Criticality of the career task: All the tasks of the career acquisition process aren’t weighted the same. Some tasks are quite a lot more important and time intensive than the others. For example, the task of preparing a resume is more important for the career acquisition process to succeed. So, this aspect of the career guidance is taken care of while building a recommended schedule.
6.
Ideal Schedule: The preferred schedule should be close to the ideal schedule after taking the other factors into consideration. Having this factor play its part in building the recommended schedule, the probability of success is expected to be high. As this factor is a direct reflection from the advice of the career counselors, it is important to include it as an objective to be met while building the optimized schedule.
1.3 Disclaimer
It is not intended to be fully comprehensive to replace an existing career counselor.
1.4 Technologies/Tools Used
1.
Android platform (ADT bundle) : For developing a mobile application that can be used by the job seekers.
2.
Parse cloud : This provides backend as a service with a web data interface.
4
3.
Programming language : Java
4.
Scripting language for the Android GUI : XML
5.
Query language
: Query language provided by the Parse cloud’s SDK
6.
Algorithms : Simulated Annealing, Knuth shuffle
7.
External libraries : Androidplot for drawing graphs on the Android
8.
IDE : Eclipse
9.
UML editor : Violet
10.
Drawing tool for the ER-diagram : EDraw all in one drawing software
11.
Content for career counseling : The Serious Job Seeker, an ebook.
The database for the Android application is stored on the Parse Cloud. In order, to establish the connection between the Android application and the Parse Cloud and the Android application, a few configuration steps are required which are discussed in a later chapter. The overview of this interaction is illustrated in the figure [6] below.
Figure 1 Overview of the interaction between Android and the Parse Cloud
5
Chapter 2
PROBLEM SPECIFICATION
2.1 Building the Schedule Recommendation
This section encapsulates the main idea behind the Career Plan Tracker. Every job seeker who intends to complete the career acquisition process of finding a job, within a time frame that is shorter than the ideal recommendation, is required to make some clever decisions in order to minimize the losses incurred due to the availability of a shorter time frame. The Career Plan
Tracker eliminates this stressful step for the job seeker and builds a wise schedule recommendation based on a few promising parameters. Hence, the jobseeker will be left with the motivation of completing the career acquisition process with the schedule recommended by the
Career Plan Tracker.
2.1.1 Philosophy of the Problem
Understanding the background of the job seeker helps in generating a tight schedule that keeps the job seeker motivated and active throughout the completion of the career acquisition process. It is essential to model the close dependence between the background of the job seeker and the schedule recommendation so that there will be a continuous drive for the job seeker to work towards the end career goals. In this complex process of building personalized schedule recommendations for job seekers, it is important to list the main objectives required to achieve optimization.
2.1.2 Problem Definition
The ideal schedule of a successful career acquisition process to find a job has to be compressed to fit the shorter available time of the job seeker in an optimized way to fulfill multiple objectives.
6
2.1.3 Properties of a Career Acquisition Process
The career acquisition process essentially includes the popular set of steps [2] that the career counselors usually recommend for finding a job. The Career Plan Tracker is developed based on the career acquisition process defined in a well-established book called the “The Serious
Jobseeker” [2] . Having derived its content, the set of steps are as follows:
Step 1: Getting Organized
Step 2: Awareness
Step 3: Self-Assessment
Step 4: Job Search Strategy
Step 5: Resumes and Portfolios
Step 6: Interview Preparation
Out of these steps, not all of them are equally weighted. In order to distinguish between them, some of them are considered as critical steps. These include the two steps 4 and 5 from the list mentioned above.
2.1.4 Properties of an Ideal Schedule
Ideally, the steps listed above as a part of the career acquisition process [2] will take three to six months. Considering career acquisition process to be a full time serious job, three months would be 480 hours of work. Depending on the importance of each step of the career acquisition process, the total time of three months (i.e. 480 hours) should be well distributed among the career steps. This results in an ideal schedule for the career acquisition process which will be used
7 as one of the parameters to compute the schedule recommendation. An example of ideal schedule is mentioned below:
Step 1: Getting Organized
Step 2: Awareness
Step 3: Self-Assessment
Step 4: Job Search Strategy
Step 5: Resumes and Portfolios
Step 6: Interview Preparation
-
-
-
-
-
-
20 hours
20 hours
40 hours
200 hours
120 hours
80 hours
2.1.5 Understanding the Personality Type of the Jobseekers
The Career Plan Tracker categorizes jobseekers based on their Holland personality type using the
Holland personality type test. The different Holland personality types [2] are listed below as quoted in “The Serious Jobseeker” [2] :
1.
Artistic
enjoy working in unstructured situations using imagination and creativity
tend to dislike having to follow rules or set procedures
enjoy doing things that requiring a sense of design and an appreciation of aesthetics
these people are frequently innovators who tend to "think way outside the box"
8
2.
Realistic
enjoy "hands-on" work using tools, equipment, and machinery
like working outdoors or with plants or animals
enjoy sports or outdoor activities like rock climbing, biking, hiking or back packing
don't like doing a lot of paperwork
frequently work on teams to accomplish tasks or complete projects
3.
Conventional
prefer work that is detailed and orderly, structured and routine
enjoy work that involves data and information, rather than people or things
likes structure with rules that are known
dislikes having to be creative
jobs in this area involve orderly processes and record keeping
these people are reliable, efficient, conforming, and conscientious individuals
4.
Enterprising
skilled at persuading, leading, performing, influencing or managing others
able to work to meet organizational goals or economic gain
highly money motivated
work requires energy and ambition, and a fair amount of self-confidence
jobs are usually business related and often involve sales and promotion
entrepreneurial, energetic and optimistic; establish rapport easily - sociable and talkative
9
these people are focused on competing and getting ahead
5.
Investigative
like to observe, learn, analyze, evaluate, and solve problems
prefer working with information and data, rather than with people or things
enjoy strategy games (chess, checkers etc.) or computer games
frequently skilled in math and/ or science
may play a musical instrument - (music has a math component)
these people tend to be analytical and may appear quiet and pensive
6.
Social
like to help people - prefer teaching, communicating, and serving others
skilled with words - able to share ideas effectively to enlighten or inform others
able to engage people at a personal and emotional levels
can work with minimal structure or supervision
tend not to be significantly money motivated
these people are altruistic, sociable, friendly and socially responsible
2.1.6 Understanding the Skills/Options of the Job Seeker that Speeds up the Career
Acquisition Process
These include skills and a few options related to the background of the job seekers. They are listed as below:
1.
Writing skills
10
2.
Reading skills
3.
Speaking skills
4.
Presentation skills
5.
Analysis skills
6.
Research skills
7.
Having a huge network of friends or acquaintances
8.
Being social
9.
Being desperate for jobs
10.
Being presentable/expressible
11.
Being organized
12.
Being professional
Job seekers having any of the above skills/options may end up completing the career acquisition process much faster than anticipated. Hence it is important to take this factor into consideration while building a schedule recommendation.
2.1.7 Multiple Objectives for Building an Optimized Schedule Recommendation for the
Career acquisition process
The different objectives include the following:
1.
Ideal schedule factor: The schedule recommendation should closely resemble the ideal schedule.
2.
Criticality of career tasks factor: The more important career steps should have more emphasis and time allotted in the schedule recommendation.
11
3.
Holland personality type factor: The schedule recommendation should closely resemble the schedule of a successful job seeker in the past having a similar Holland personality type.
4.
Career skills/options factor: The schedule recommendation should closely resemble the schedule of a successful job seeker in the past having a similar set of career skills and options.
5.
Motivation/desperation factor: The job seeker’s dedication also depends on the level of desperation for the job. Certain family/relationship problems can raise the level of desperation in the job seeker. In this scenario, the schedule recommendation intends to retain the job seeker’s motivation by recommending a slightly tougher schedule (i.e. a faster paced schedule).
2.1.8 Algorithm of Choice: Simulated Annealing
The Career Plan Tracker uses a simple implementation of simulated annealing to solve this as a multi-objective optimization problem. A detailed explanation of the algorithm and its implementation is given in the next chapter. The following reasons [5] help in the selection of simulated annealing as the algorithm of choice.
1.
Huge solution space: It is hard to use a brute force technique on the huge solution space of the problem.
2.
No relationship between sub problems: The problem cannot be divided into sub problems as in a divide and conquer approach.
3.
Not an incremental problem: An efficient algorithm cannot be written using backtracking or branch and bound to solve this problem very quickly.
12
4.
Not a dynamic programming problem: Difficult to see it as a dynamic programming problem.
5.
Can establish a structure between the solutions: This is useful to determine if hill climbing approaches can be used as two neighboring solutions can have a relationship between them.
6.
Exact solution is not needed: A fairly decent solution would suffice to build a schedule recommendation as there is no way of determining for sure on what works best for the job seekers.
7.
Simpler to implement: The simulated annealing is a much simpler but powerful algorithm to be used.
13
Chapter 3
SIMULATED ANNEALING
Simulated Annealing is a probabilistic method used to find a global maximum on the cost functions of a particular solution space. A solution space consists of a set of all probable solutions to the problem. Usually, this solution space is very large making it impossible to solve the problem in reasonable time using deterministic algorithms. Under a scenario like this, Simulated
Annealing is used.
Simulated annealing is inspired from the commonly used annealing process in metallurgy and material sciences. During this process, metals are heated to high temperatures and are allowed to cool down gradually such that the resulting metal becomes more usable in terms of the metal’s physical properties like ductility. Different cooling rates are used for cooling different metals.
Similar to the annealing process described above, simulated annealing is used with an initial high temperature and a good cooling rate to achieve the desired results. Within the solution space, each solution is located in the neighborhood of a few other solutions. The algorithm works by picking a random start solution from the solution space followed by an iterative annealing process.
During each of these iterations, the algorithm picks the next solution from the neighbors of the previously picked solution. However, this picking up of a solution has a probability associated with it called the acceptance probability. This probability in turn depends on the difference in the costs between the solution picked prior to the current iteration and the solution picked from the currently available neighbors (i.e. in the current iteration). Moreover, the acceptance probability equals one whenever the neighbor solution picked is better than the previously picked solution in terms of the cost which is discussed later in the chapter. Also, the acceptance probability depends on the current temperature of the iteration. When the temperature is high, the probability of
14 accepting the neighbors is high and as the temperature reduces, this probability decreases. Finally, when the temperature reaches a minimum stable temperature, the annealing process stops and the current solution at the end of this process is usually a good enough solution for the problem.
For the multi-objective optimization problem discussed in the previous chapter, one probable job seeker’s schedule in the career acquisition process is treated as one solution in the solution space.
Simulated Annealing is then used to find the global maximum which represents the best possible schedule for the jobseeker’s career acquisition process.
3.1 Pseudo Code
Step 1: initialize the starting temperature and the cooling rate
Step 2: pick a start solution
Step 3: make current solution equal to start solution
Step 4: while ( temperature > 1 )
Step 5: get neighbor solution from the current solution
Step 6: if (acceptance probability > random value) then
Step 7: make current solution equal to the neighbor solution
Step 8: else reject the neighbor solution.
Step 9: reduce the temperature according to the cooling rate
Step 10: repeat from Step 4
3.2 Implementation
The specific implementation to solve the problem under consideration is attached to the appendix of the document. However, the important details pertaining to the major components of the algorithm are mentioned in this section.
15
3.2.1 Considerations for the Implementation of the Algorithm
1.
It is important to select cheaper functions (cost and neighborhood functions) in the implementation of this algorithm in order to satisfy the timing requirements of the Career
Plan Tracker.
2.
Clamping: Negative time recommendations in the schedule recommendation should be avoided at the time of choosing the neighbor. This is accomplished by making the acceptance probability zero in cases of negative time recommendations and is called clamping the solution space.
3.2.2 Encoding used for the Simulated Annealing
Decimal encoding is used to represent the career task times in hours. As the career steps are fixed and predetermined, array of type ‘int’ is used to represent the task times in the order of the career steps listed earlier. For example, the career task time for the “Getting organized” step is always stored in the 0 th index of the array as it is the first step of the career acquisition process..
3.2.3 Initial configuration at the beginning of the Algorithm
Start temperature = 1,000,000
Cooling rate = 0.99999
Start solution = ideal schedule of the career acquisition process
3.2.4 Acceptance Probability
The acceptance probability determines whether to accept or reject a neighbor during the annealing process.
If the new energy i.e. the energy of the neighbor is better than the energy of the current solution, then the acceptance probability is 1. This means that the neighbor is definitely accepted. But if the
16 new energy isn’t better than the energy of the current solution, then the acceptance probability [12] is computed as e (newEnergy - energy)/T . This means that during the earlier temperatures of the annealing process, the probability of accepting a neighbor even if its energy is worse than the energy of the current solution is high. As the temperature decreases, this probability reduces.
The acceptance probability is zero when the neighbor has at least one negative career task time included in the schedule recommendation. double acceptanceProbability(double energy, double newEnergy, double temperature) [12]
{
// If the new solution is better, accept it.
if ( newEnergy >= energy && newEnergy>0)
{
return 1.0;
}
// If the new solution is worse, calculate an acceptance probability.
If ( newEnergy > 0) return Math.exp((-energy + newEnergy) / temperature);
else return -1; // If the energy is negative reject the solution.
}
17
3.2.5 Cost function
The cost function determines the profit of the solution and is considered to represent the energy of the solution at the time of computing the acceptance probability. The equations used in the cost function are as follows:
Profit = (1 – vp) / (hpt + cs + c + is + m)
Where, vp = validating penalty hpt = Holland personality type factor cs = career skills/options factor c = criticality factor is = ideal schedule factor m = motivation factor
The validating penalty ensures that none of the career task times in the schedule recommendation are negative. It also ensures that none of the career tasks occupy a huge proportion of the career acquisition process. vp = 100 if there is at least one career task time that is negative in the schedule or if just one of the career tasks occupy a large proportion in the career acquisition process.
= 0 otherwise
The hpt factor ensures that the schedule recommendation is closely similar to the successful job seekers in the past who have possessed similar personality types as the current user. hpt = ∑ (careerTaskTimeForHpt i
/ totalIdealTime – careerTaskTimeForCurrentSolution / totalDesiredTime)
Where,
18 careerTaskTimeForHpt i
= The average time taken to complete the career task i by job seekers of the similar personality type as the current user. careerTaskTimeForCurrentSolution i
= The time recommendation of the career task i from the current solution of the annealing process. totalIdealTime = The ideal time to complete all the career tasks i.e. 480 hr. totalDesiredTime = Desired time of the current user.
The career skills/options factor ensures that the schedule recommendation is closely similar to the successful job seekers in the past who have possessed similar career skills/options as the current user. cs = ∑ (careerTaskTimeForCs i
/ totalIdealTime – careerTaskTimeForCurrentSolution i
/ totalDesiredTime)
Where, careerTaskTimeForCs i
= The average time taken to complete the career task i by job seekers having similar career skills/options as the current user. careerTaskTimeForCurrentSolution i
= The time recommendation of the career task i from the current solution of the annealing process. totalIdealTime = The ideal time to complete all the career tasks i.e. 480 hr. totalDesiredTime = Desired time of the current user.
The criticality factor makes sure that the lesser important tasks of the schedule are compressed first. In this way, the critical career tasks retain their important in the schedule recommendation. c = sum_critical_factors / sum_non_critical_factors
19 sum_critical_factors = ((careerTaskTimeForCurrentSolution
3
+
careerTaskTimeForCurrentSolution
4
)
/ totalDesiredTime) –
((idealCareerTaskTime
3 totalIdealTime)
+ idealCareerTaskTime
4
) sum_non_critical_factors = ((careerTaskTimeForCurrentSolution
0
+ careerTaskTimeForCurrentSolution
1 + careerTaskTimeForCurrentSolution
2
+ careerTaskTimeForCurrentSolution
5
)
/ totalDesiredTime) –
/
((idealCareerTaskTime
0
+ idealCareerTaskTime
1 + idealCareerTaskTime
2
+ idealCareerTaskTime
5
) / totalIdealTime)
The ideal schedule factor ensures that the schedule recommendation is close to the ideal schedules usually recommended by real time career counselors. is = ∑ (idealCareerTaskTime i
/ totalIdealTime – careerTaskTimeForCurrentSolution i
/ totalDesiredTime)
Where, idealCareerTaskTime i
= The ideal time to complete the career task. careerTaskTimeForCurrentSolution i
= The time recommendation of the career task i from the current solution of the annealing process. totalIdealTime = The ideal time to complete all the career tasks i.e. 480 hr. totalDesiredTime = Desired time of the current user.
The motivation factor ensures that all the non critical tasks are compressed more. m = - (sum_non_critical_factors)
20
} double getProfit(int [ ] currentSolution)
{ return
(1-getValidatingPenalty(currentSolution)) *
(getHPTFactor(currentSolution) + getCareerSkillsFactor(currentSolution) + getCriticalityFactor(currentSolution) + getIdealScheduleFactor(currentSolution) + getMotivationFactor(currentSolution))-1 ;
3.2.6 Neighborhood function
Randomly select two career tasks from the schedule recommendation. Add an hour to the first task and subtract an hour from the second task. For selecting the career tasks, a uniformly distributed random function (using the Knuth shuffle algorithm [9] ) is used. This has an asymptotic complexity of O(n).
21
} int[ ] getNeighbor(int [ ] current)
{
/* Generate the neighbor by randomly adding 1 to half of the elements and -1 to
the remaining half. If odd, one element remains unaltered.*/ int [ ] indices = new int[current.length]; int [ ] neighbor = new int[current.length]; for(int i=0;i<current.length;i++) indices[i]=i;
/* Knuth shuffle is used to have a uniformly distributed random arrangement of the
elements of the array. */ indices = shuffle(indices); [10]
//Neighbor function alters only two elements neighbor[indices[0]] = current[indices[0]]+1; neighbor[indices[1]] = current[indices[1]]-1; for(int k=2;k<indices.length;k++) neighbor[indices[k]] = current[indices[k]]; return neighbor;
3.3 Fitting into the Android Application
The simulated annealing approach is tested to consistently produce reliable schedules at the end of the annealing process. With the configuration used in this implementation, it takes about 1 min and 2 seconds of computer time to complete its execution. Hence, it will be a good choice to have it run as a background service in the Android device. This solves the problem of long execution time of the algorithm.
22
The advantage of running the algorithm as a background service is that the job seeker can be prompted to complete other important tasks like reading an introduction to the career acquisition process. By the time the algorithm completes its execution the job seeker will finish other tasks that are not dependent on the algorithm. In this way the job seeker needn’t wait till the algorithm completes its execution.
} void computeScheduleSA() [9]
{
Log.d("SA","Starting career plan builder service in the background");
Intent startServiceIntent = new Intent(getApplicationContext(),
CareerPlanBuilderService.class); startService(startServiceIntent);
23
Chapter 4
SETTING UP THE DEVELOPMENT ENVIRONMENT
This chapter intends to explain the steps required in the configuration of Android and the Parse cloud SDKs along with the development environment necessary for building Android mobile applications.
4.1 Setting up the Android development environment
The Android developer tools (ADT) bundle is available for download on the Android developers’ web page. This download included everything that is needed to get started with the Android application development. The ADT bundle [6] includes the following:
1.
Eclipse IDE with built in ADT plugin
2.
Android SDK tools
3.
Android Platform tools
4.
The latest Android platform
5.
The latest Android system image for the emulator
The Android SDK [6] provides you the API libraries and developer tools necessary to build, test, and debug apps for Android.
4.2 Configuring Androidplot
AndroidPlot [13] is an open source library for creating dynamic and static charts within your
Android application. It was designed from the ground up for the Android platform, is compatible with all versions of Android from 1.6 onward. It support the following types of charts:
1.
Line charts
2.
Bar charts
3.
Pie charts
24
4.
Step charts
5.
Scatter charts
To configure the development environment to use this library, it is required to download the latest version into the 'libs' folder of the Android project.
4.3 Configuring the Parse Cloud
For the Parse cloud to respond to the requests of the Career Plan Tracker, the following steps have to be accomplished. This configuration [7] enables the Career Plan Tracker to communicate with the Parse cloud and meet the data requirements. The steps [7] are as follows:
1.
Download the SDK’s zip file and extract its contents into the “libs” folder of the Android project. Make sure that the contents are directly put under the libs folder as a nested folder is not recognized here.
2.
From the Android Activity components used in the Android project, the communication with the Parse cloud can be established through the import of appropriate packages provided by Parse.
3.
Parse cloud generates a unique application id/client key for the Career Plan Tracker. This information is added to the “onCreate()” method of the startup activity of the Career Plan
Tracker. The code snippet is shown below as an example. public void onCreate()
{
}
Parse.initialize(this, "bmqQtsv0chgM0ydvcBzhm0ineK3VVJBGh6prcakp",
"49PPwrWYCSPgr2vvd66r3pGwIO2UfZV29uX3rooF");
25
4.
The Career Plan Tracker should request the following permissions: a) INTERNET b) ACCESS_NETWORK_STATE
To enable these permissions, the following lines of code should be added to the file
“AndroidManifest.xml”.
<uses-permission android:name = "android.permission.INTERNET" />
<uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" />
5.
For testing the SDK installation, the following code snippet can be used in the
“onCreate()” method of the startup activity. This code creates a new database object on the cloud which can be seen on the data browser of the Parse.
ParseObject testObject = new ParseObject("TestObject"); testObject.put("foo", "bar"); testObject.saveInBackground();
4.4 Android Application Setup
To study the specific problem specified in the earlier chapters, the Career Plan Tracker is developed. Career Plan Tracker is an Android application that stores the job seeker profiles on the cloud. It retrieves the relevant information needed for the computation of an optimal schedule that caters to the needs of the job seekers.
26
Once the ADT bundle is downloaded, Android projects can be directly created from the Eclipse
IDE. The options for creating a project lies in the File menu of the IDE. Creating an Android project commences the development of the Career Plan Tracker.
27
Chapter 5
USE CASE REPORTS
5.1
Use-case Diagram
The UML notation of the use-cases is illustrated in the diagram below. The next section gives more details in terms of the user flows within the Android application.
Figure 2 Use-case diagram for the Career Plan Tracker
28
5.2 User Flows
5.2.1 User
The user of the Career Plan Tracker will be a job seeker who intends to find a job.
Main Flow:
1.
Signs up/logs in by providing username and password.
2.
Selects the career skills/options which the user possesses.
3.
Takes the Holland personality test.
4.
Views the user’s profile page which displays a summary of the user’s personality type and career skills/options.
5.
Reads the introduction about the career acquisition process and the career tasks needed to be completed.
6.
Receives a schedule recommendation from the Career Plan Tracker to follow through the career acquisition process.
7.
Reads information from the ebook, “Serious Job Seeker” when prompted by the Career
Plan Tracker.
8.
Completes every career task given in the schedule.
9.
Gives appropriate feedback when prompted by the app.
10.
Clicks on the “done” button when the user achieves the goal.
Exceptional Flow:
1.
Incorrect login credentials provide error message for the user.
2.
At the time of reading information from the ebook, “Serious Job Seeker”, if the website is down, the respective error is displayed as it is.
29
3.
Clicks the “done” button before achieving the goal. In this case the user can click back the “I am not done” button to resume.
5.2.2 Career Plan Tracker
Main Flow:
1.
When the user completes the Holland personality test, the data required for running the algorithm is retrieved from the Parse cloud and is stored in a local database.
2.
Once the local database is populated, the simulated annealing algorithm is executed on the background thread.
3.
Finally, when the user completes the career acquisition process i.e. when the “done” button is hit, the user data gets stored in the cloud database.
Exceptional Flow:
1.
When there is no internet connectivity, the app stops working as it cannot establish a communication with the Parse cloud.
30
Chapter 6
DATABASE REQUIREMENTS AND MODELING
6.1 Database Requirements
The data used in the Career Plan Tracker is modelled and stored on the server (i.e. the Parse
Cloud) and the data needed locally for building an optimized schedule recommendation is stored on the user’s Android device.
The data requirements on the server side are specified below:
1.
The details and the authentication credentials of the users have to be stored.
2.
The list of different Holland personality types has to be stored.
3.
The list of career skills/options that may impact the pace of the career acquisition process has to be stored.
4.
The list of career tasks that make up the career acquisition process has to be stored.
5.
The mapping between the users and the Holland personality types must be modelled.
6.
The mapping between the users and the career skills/options must be modelled.
7.
The time taken by the successful job seekers to complete each career task has to be stored under the mapping between users and the career task times.
The data requirements on the client side are specified below:
1.
The average time taken for completing each career task in the past, when a user possesses any of the career skills/options has to be computed and stored for every career skill/option the client selects.
2.
The average time taken for completing each career task in the past for the specific
Holland personality types that are similar to the client has to be stored.
3.
The motivation factor associated with the client should be stored.
31
4.
The desired time in which the client intends to complete the career acquisition process is stored.
6.2 Data Modeling
BCNF normalization is used to model the database schemas on both the server and the client.
BCNF Decomposition Algorithm [11] :-
Input: Relational data R + FD’s for R
Output: Decomposition of R into BCNF relations with Lossless join
Algorithm:-
Step1: Compute keys for R
Step2: Repeat until all relations are in BCNF:
Pick any R` with A`-> B` that violates BCNF
Decompose R` into R1(A,B) and R2 (A, rest)
Compute FD’s for R1 and R2
Compute key for R1 and R2
The resultant normalized schema is illustrated below using the ER diagram notation for the data on the server and client sides.
6.3 ER Diagram for the database on the Parse Cloud
32
Figure 3 ER diagram for the server-side data
6.4 ER Diagram for the Local Database stored on the Android Device
33
Figure 4 ER diagram for the client-side data
34
Chapter 7
RESULTS AND ANALYSIS
A sample schedule recommendation for a job seeker is discussed here to understand the inner working of the Career Plan Tracker. The job seeker’s background is considered as the input to the
Career Plan Tracker’s recommendation system. Following that is the list of steps carried out before executing the algorithm.
7.1 Case study: Computing the Schedule Recommendation for a Sample Job seeker
7.1.1 The Career Plan Tracker’s way of Building a Schedule Recommendation
Table 1 Input #1 - Jobseeker’s persona
Desired time for completing the career 400 hours acquisition process
Prominent Holland personality type Artistic
Motivation
Career skill/Option #1
Career skill/Option #2
Career skill/Option #3
Yes
Writing
Reading
Socializing
The persona specifies that the job seeker is motivated to successfully complete the career acquisition process as quickly as possible. It also specifies the desired time in which the job seeker intends to complete the career acquisition process.
Compression factor = desired time / ideal time = 400/480 = 0.8333
35
Career task
Getting organized
Table 2 Input #2: A fixed constant Ideal Schedule
Time (in hours)
20
Awareness
Self-assessment
Job search strategy
Resumes and portfolio preparation
Interview preparation
20
40
200
120
80
The ideal schedule is compressed using the compression factor and considered for the start solution of the algorithm. So the start solution, at the beginning of the annealing process looks like the below schedule.
Career task
Getting organized
Awareness
Self-assessment
Table 3 Start solution for Simulated Annealing
Time (in hours)
16
16
33
Job search strategy
Resumes and portfolio preparation
Interview preparation
166
100
66
The total time for the schedule is 397 hours which is well within the desired time requirement of the job seeker. This initial schedule has a profit of 4.645161290322581. So, ideally the schedule
36 recommendation that the Career Plan Tracker builds should produce a better schedule that fits better for the given persona of the job seeker.
Table 4 Input #3.a - History data of successful jobseekers having writing skills
Career skill/Option #1 Writing
Average time for getting organized 15 hours
Average time for awareness
Average time for self-assessment
Average time for job search strategy
Average time for resumes and portfolio
Average time for interview preparation
15 hours
35 hours
235 hours
100 hours
90 hours
Table 5 Input #3.b - History data of successful jobseekers having reading skills
Career skill/Option #2 Reading
Average time for getting organized
Average time for awareness
Average time for self-assessment
8 hours
10 hours
37 hours
Average time for job search strategy
Average time for resumes and portfolio
Average time for interview preparation
195 hours
110 hours
120 hours
Table 6 Input #3.c - History data of successful jobseekers having socializing skills
Career skill/Option #3 Socializing
Average time for getting organized
Average time for awareness
Average time for self-assessment
Average time for job search strategy
20 hours
20 hours
50 hours
150 hours
Average time for resumes and portfolio
Average time for interview preparation
140 hours
100 hours
Table 7 Input #4: History data of successful job seekers having Artistic personality type
Prominent Holland personality type Artistic
Average time for getting organized
Average time for awareness
15 hours
15 hours
Average time for self-assessment
Average time for job search strategy
Average time for resumes and portfolio
Average time for interview preparation
30 hours
220 hours
110 hours
90 hours
37
Table 8 Initial configuration of the Simulated Annealing algorithm
Temperature 1,000,000
Cooling rate 0.99999
38
7.1.2 Output
A schedule recommendation is generated mimicking the end of a real-time career counseling session. The final schedule looks like the schedule given below:
Table 9 Output Schedule Recommendation
Career task
Getting organized
Awareness
Self-assessment
Job search strategy
Resumes and portfolio preparation
Interview preparation
Time (in hours)
12
14
33
166
97
75
7.1.3 Comparative Analysis and Conclusion
The schedules generated by the two approaches are discussed.
First approach (Without the Career Plan Tracker): Take the ideal schedule and compress it using the compression factor. This might be the way to generate a schedule to satisfy the time requirements of the job seeker in the absence of the Career Plan Tracker.
Second approach (With the Career Plan Tracker): Provide the inputs required for the Career Plan
Tracker’s recommendation system (i.e. the simulated annealing algorithmic implementation) and let the Career Plan Tracker build a schedule recommendation.
For comparing the schedules generated by both these approaches, the following figures can be used:
39
1.
The cost function used in the simulated annealing algorithm: This computes the profit of using a particular career schedule with respect to the six objectives of the career schedule discussed in chapter 1.
2.
Analyzing the difference in the schedules with respect to the job seeker’s persona given.
These two figures are discussed in further detail as follows.
4
3
2
1
6
5
Profit of the career schedule
0
1 2
Figure 5 Comparison of profits for the two Career Schedules
The first bar in the chart represents the profit (metric that shows how well the schedule satisfies the six objectives mentioned in the earlier chapters) of the career schedule generated by direct compression to satisfy the time requirements of the job seeker. Whereas the second bar in the chart represents the profit of the career schedule recommended by the Career Plan Tracker.
As the profits are computed based on the cost function discussed in the chapter of simulated annealing, the profits turn out to have a precision of 14 digits. Hence, what seems to be a minor
40 difference in the profits displayed on the graph, can, in reality scale to represent a really huge difference.
Moreover, the career schedule generated by approach 1 isn’t too bad in the first place. As this is the exact reflection of an ideal schedule but for a shortened timeframe, it is quite good to be used in real practice. But as the Career Plan Tracker builds a much better schedule in terms of the six factors considered, the usefulness of this mobile application can be considered enormously high.
The second figure analyzes each career step of the schedule recommendation built by the Career
Plan Tracker. Comparing it with the schedule generated from approach 1 mentioned earlier in this section, and relating it back with the persona of the job seeker can help us derive some interesting observations. The comparison is illustrated graphically in the figure below:
180
160
140
120
100
80
60
40
20
0
Career schedule generated without the career plan tracker
Career Schedule generated by the career plan tracker
Figure 6 Task-wise comparison between the two Career Schedules
41
The graph shows how slightly the two schedules differ but yet generate a huge difference in the profits of the career schedules. It might well be the case that the time duration chosen i.e. of 480 hours might be small enough to result in smaller difference in the schedule. But on the other side, these slight differences when summed up forms a much bigger difference that is clearly evident from the previous graph which compares the overall profit of the entire career schedule.
This graph also depicts compression based on the six factors that form the objective of the compression. For example, the lesser important tasks can be observed to be more compressed.
Also, the higher career task time for the career task, “Interview preparation” is attributed to a similar history data (with respect to the personality types and the career skills/options) that has been observed in the past.
Considering the fact that, a few minor changes to the career schedule with the help of the Career
Plan Tracker may help the job seekers find a job faster satisfies the objective of this project.
42
Chapter 8
FUTURE WORK
1.
The sample history data used as the input for the algorithm in the Career Plan Tracker can be replaced with a more accurate data that the Career Plan Tracker expects to record as time passes on.
2.
The Career Plan Tracker can be made a cross platform application by extending its support for the iPhones, Windows phones and the web.
3.
Presently, all the objectives are considered equally important. But in the future, as history data will be available, the more important objectives can be weighted higher than the others while building the schedule recommendation.
4.
More objectives can be added to the optimization problem that the Career Plan Tracker presently solves.
5.
Better user interfaces can be developed for larger screen devices like the tablets.
6.
More fun features can be added to the Career Plan Tracker to make it more interesting to use.
43
APPENDIX
Code for Simulated Annealing import java.util.Random; public class Experiment1 {
//Input from the seriousjobseeker private static final int no_of_career_steps = 6;
//Considered as a full-time job for a 3 month duration = 480 hours private static final int total_ideal_time = 480; private static final int [] ideal_schedule =
{20,20,40,200,120,80};
//The time before which the jobseeker aspires to find a job private static final int total_desired_time = 400;
//Values to get from the external database private private
//Initialized with sample data static static final final int int
[]
[] ct_hpt = {15,15,30,220,110,90}; ct_skill_reading =
{8,10,37,195,110,120}; //Initialized with sample data private static final int [] ct_skill_writing =
{15,25,35,235,100,90}; //Initialized with sample data private static final int [] ct_skill_social = {20,20,50,150,140,
100}; //Initialized with sample data
// Calculate the acceptance probability private static double acceptanceProbability( double energy, double newEnergy, double temperature)
{
// If the new solution is better, accept it if (newEnergy >= energy && newEnergy>0) { return 1.0;
}
// If the new solution is worse, calculate an acceptance probability if (newEnergy > 0) return Math.exp((-energy + newEnergy) / temperature); else return -1;
} private static double getProfit( int [] currentSolution)
{
44 return (1-
getValidatingPenalty(currentSolution))/(getHPTFactor(currentSolution)+g
etCareerSkillsFactor(currentSolution)+getCriticalityFactor(currentSolut ion)+getIdealScheduleFactor(currentSolution)+getMotivationFactor(curren tSolution));
} private static int [] getNeighbor( int [] current)
{
/*Generate the neighbor by randomly adding 1 to half of the elements and -1 to the remaining half. If odd, one element remains unaltered.*/ int int
[] indices = new
[] neighbor = indices[i]=i; new int [current.
int length
[current.
for ( int i=0;i<current.
length ;i++)
]; length ];
/*Knuth shuffle is used to have a uniformly distributed random arrangement of the elements of the array*/ indices = shuffle(indices);
//Neighbor function alters only two elements neighbor[indices[0]] = current[indices[0]]+1; neighbor[indices[1]] = current[indices[1]]-1; for ( int k=2;k<indices.
length ;k++) neighbor[indices[k]] = current[indices[k]]; return neighbor;
} private static int [] shuffle( int [] indices)
{ for ( int i =0; i<indices.
length ; i++)
{
Random rand = new Random(); int r = rand.nextInt(i+1); //Random number between 0 and i
//Swap the elements at r and i
} return indices;
} int temp = indices[r]; indices[r] = indices[i]; indices[i] = temp;
public static void main(String[] args) {
//Simulated Annealing - algorithm starts here double temperature = 1000000; double cooling_rate = 0.99999; double compressionFactor =
( double ) total_desired_time /( double ) total_ideal_time ;
//Initialize with the initial solution int [] currentSchedule = new currentSchedule[0] = ( new int [ no_of_career_steps ];
Double(20*compressionFactor)).intValue(); currentSchedule[1] = ( new
Double(20*compressionFactor)).intValue(); currentSchedule[2] = ( new
Double(40*compressionFactor)).intValue(); currentSchedule[3] = ( new
Double(200*compressionFactor)).intValue(); currentSchedule[4] = ( new
Double(120*compressionFactor)).intValue(); currentSchedule[5] = ( new
Double(80*compressionFactor)).intValue();
display(currentSchedule);
//Setting the best solution as the initial solution int [] bestSchedule = new int [ no_of_career_steps ]; bestSchedule[0]=20; bestSchedule[1]=20; bestSchedule[2]=40; bestSchedule[3]=200; bestSchedule[4]=120; bestSchedule[5]=80; double bestProfit = 0.0; //getProfit(bestSchedule); while (temperature > 1)
{
//Create a neighbor int double
[] neighbor = getNeighbor(currentSchedule);
currentProfit = getProfit(currentSchedule); double neighborProfit = getProfit(neighbor);
System.
out .print( "current profit:
" +currentProfit+ "\tneighbor profit:
" +neighborProfit);
//Check whether to keep the neighbor
45
46 if (acceptanceProbability(currentProfit, neighborProfit, temperature) > 0.999) {
//Keep the neighbor currentSchedule = neighbor;
System.
out .print( "\tAccepted\n" );
} else
System.
out .print( "\t\tRejected\n" );
//Check if the current schedule is the best so far if (currentProfit > bestProfit)
{
}
{
}
display(bestSchedule);
System.
out .println( "Best profit: " +bestProfit); private static double getHPTFactor( int [] current) double for
{
(
} bestProfit = currentProfit; for ( int k=0;k< no_of_career_steps ;k++)
{
} temperature *= cooling_rate;
sum=0; int bestSchedule[k] = currentSchedule[k];
i=0; i<current.
length ; i++) sum = sum+
Math.abs(( double ) ct_hpt [i]/( double ) total_ideal_time -
( double )current[i]/( double ) total_desired_time );
}
} return private
Math.abs(sum); static double getCareerSkillsFactor( int [] current)
{ double sum = 0; for ( int i=0; i<current.
length ; i++)
{ sum +=
Math.abs((( double ) ct_skill_reading [i]+( double ) ct_skill_social [i]+( doubl
47 e ) ct_skill_writing [i])/(3*( double ) total_ideal_time ) -
( double )current[i]/( double ) total_desired_time );
} return Math.abs(sum);
} private static double getCriticalityFactor( int [] current)
{
//Critical tasks should be compressed more
//Sum of non critical actual career task times double sum_non_critical =
(current[0]+current[1]+current[2]+current[5])/ total_desired
_time - ( ideal_schedule [0] + ideal_schedule [1] + ideal_schedule [2] + ideal_schedule [5])/ total_ideal_time ;
/*The above value should be big positive to represent more compression of the non critical tasks*/ double non_critical_factor = 20 - sum_non_critical;
//Sum of critical portions of the schedule double sum_critical =
(current[4]+current[3])/ total_desired_time -
( ideal_schedule [4] + ideal_schedule [3])/ total_ideal_time ;
}
//The above value should be a small positive or negative
/*The resulting factor is critical/non_critical and is supposed to be as small as possible for improving the profit of the neighbor*/
} return sum_critical/non_critical_factor; private static double getIdealScheduleFactor( int [] current)
{ double for
{
(
sum=0; int i=0; i<current.
length ; i++) sum = sum+
Math.abs(( double ) ideal_schedule [i]/( double ) total_idea l_time -
( double )current[i]/( double ) total_desired_time );
} return Math.abs(sum);
48 private static double getMotivationFactor( int [] current)
{
//The non citical tasks should be compressed more return -
((current[0]+current[1]+current[2]+current[5])/ total_desire d_time -
( ideal_schedule [0]+ ideal_schedule [1]+ ideal_schedule [2]+ idea l_schedule [5])/ total_ideal_time );
} private static double getValidatingPenalty( int [] current)
{
/* The career task time for none of the career tasks should be negative.
Also to keep the career task time close to the corresponding ideal career task time with respect to the proportion its going to make up in the total time we add penalty appropriately.
These conditions will always be considered while computing the neighbor.
*/ int penalty=0; for ( int i=0;i<current.
length ;i++) if ((current[i]<0) ||
((current[i]+200)/ total_desired_time > ideal_schedule [i]/ total_ideal_time )) penalty += 100; return penalty;
} private static void display( int [] schedule)
{
System.
System.
out out
.println(
.println(
"\n\nSchedule: " );
"Getting Organized: " +schedule[0]+ " hours" );
System.
System.
out out
.println(
.println(
"Awareness: " +schedule[1]+
"Self Assessment: "
" hours"
+schedule[2]+
);
" hours" hours"
);
System.
out
);
.println( "Job Search Strategy: " +schedule[3]+ "
System.
out .println( "Resumes and Portfolios: " +schedule[4]+ " hours" );
System.
out .println( "Interview Preparation: " +schedule[5]+ " hours" ); int sum=0; for ( int i=0;i<schedule.
length ;i++)
}
}
{ sum += schedule[i];
}
System.
out .println( "Total number of hours " +sum);
49
50
REFERENCES
1.
V.S. Gordon, “Simulated Annealing”, from the class “Artificial Intelligence”, California
State University, Fall 2012.
2.
C. Mattiuzzi, “The Serious Jobseeker” – an electronic book on careers, California State
University Sacramento, © 2013.
3.
S.J. Russell, P. Norvig, “Artificial Intelligence – A Modern Approach” 3 rd Edition,
Prentice Hall, © 2009.
4.
R. Buckland, “Simulated Annealing” – lecture video, from the class “Computing – The
Art of Design”, University of New South Wales, retrieved 3/28/2014 (Youtube).
5.
“Introduction to Android” - developer’s guide for the open source Android platform,
“developer.android.com”
, retrieved 2/12/2014.
6.
“Android Guide” - tutorials and documentation using Parse cloud.
7.
L. Angrave, “Creative, Serious and Playful Science of Android Apps” – lecture videos,
University of Illinois – Urbana Champaign,
“courser.org”
, retrieved 2/1/2014.
8.
A. Porter, “Programming Mobile Applications for Android Handheld Devices” – lecture videos, University of Maryland. “courser.org” , retrieved 3/15/2014.
9.
R. Sedgewick, “Random Shuffle” – lecture video, from the online class “Algorithms –
Part 1”, Princeton University, “courser.org” , retrieved 2/28/2014.
10.
J. Widom, “Relational Design Theory” – lecture videos, from the online class
“Introduction to Databases”, Stanford University, “courser.org” , retrieved 6/6/2013.
11.
L. Jacobson, "Simulated Annealing for Beginners", “theprojectspot.com” , retrieved
3/3/2014 (Blog).
12.
"Androidplot" - an open source graphing library for building Android applications,
“androidplot.com” , retrieved 2/15/2014.
51