ENGG5189 FUZZY EXPERT SYSTEM REPORT
Li Wei 1155062148
Background
There are hundreds of programming languages to use now, which make it difficult for programmers to decide which language is the most suitable for them.
Below picture (cited from Quora) also shows that many people, no matter they are experienced programmers or not, have the question:
Which programming language should I learn next?
Motivation
Motivated by the wide range of discussion: “ best programming language to learn” and our former hesitant experience when deciding which programming course to enroll, we decided to design a Fuzzy expert system to solve these kinds of problems.
Problem Definition
The users do not have a clear knowledge on different programming language, which make them hard to select the best/ most suitable programming language for them to learn.
System Design
The Fuzzy system is designed for recommending suitable programming languages for users to learn. And rules are provided for inference so that users need to answer some simple programming habits questions, which are used as facts in the system.
Implementation
Fuzzy type
- Difficulty the expected difficulty of programming language.
- Time the expected time spent to learn programming language every week.
- Resource the expected learning resource of programming language.
- Experience the former programming experience of the user.
- Efficiency the expected efficiency of programming language.
- Package the expected package(eg.
numpy
in python) requirements of programming language. - Debug the debugging ability and willing of user.
Objects
(conclusion)
preset values of the result
expectation_of_difficulty
time_spent_on_learning
available_resource
experience
package_requirement
efficiency_requirement
upset_when_debug
market_requirement
whether the reason user learns programming is for finding a job.
company_orientation
the expected IT companies the user wants to work for.
interest_field
the expected programming field the user wants to work in.
compiled_language_or_not
whether the user is suitable for compiled language or not.
Rules
Rules in the system is divided into two perspectives: Facts and languages.
For the facts perspective, the rules help to inference the conclusion and other objects such as expectation of difficulty by facts. Here are some examples:
1 | RULE CODE:difficulty_rule_easy_111 |
For the languages perspective, the rules help to inference the conclusion by languages, this kind of rule makes use of the key features of different programming language. Here is one example:
1 | RULE CODE:js_rule_2 |
Inference structure
![Untitled Diagram](../images/Untitled Diagram.png)
Results
Given these facts:
- time_spent_on_learning much (1.0)
- **available_resource **much (1.0)
- experience much (1.0)
- **package_requirement **high (1.0)
- efficiency_requirement high (1.0)
- upset_when_debug No (1.0)
- market_requirement Yes (1.0)
- company_orientation Apple (1.0)
- interest_field No_preference (1.0)
The results are:
Discussion and conclusion
Pros and cons
Our system has done a basic programming language recommendation task, which covers almost all possibilities. And the result is really practical for uses.
However, the system can not solve a few specific language requirements well, such as Database programmer and so on.
Further improvements
According to what we mentioned above, the system can be still improved by importing more language-based rules so that the system can handle some specific language requirements better.
Work distribution
Work | Liu Boyi | Li Wei |
---|---|---|
Brainstorm the topic | yes | yes |
Conduct survey and collect expert knowledge | yes | yes |
Design the system (Main workload) | yes | yes |
Coding the Fuzzy Set and Object part | yes | |
Coding the Rule part(Main workload) | yes | yes |
Test and debug | yes |