With a dear friend. During our last train journey, we were talking about the sacred geometry of our life chances, about growing old, about not becoming an old man full of regrets but growing as an old content man with full of white hairs - but not with regrets. What could be the hidden law of a probable outcome - we don't know, we will never know - if we don't try it firsthand. What could be the easiest way to become that old man that we despise so much - Follow others for fear of what society would say otherwise, living in the fear of what people might think? Nothing matters, as if I don't do what I told you before, that regret will take over and will never leave. I am very glad to have this friend of mine, an honorable man, a man who doesn't believe playing solely for the money, status, or respect but for what he believes is right (don't get carried away too far - he is quintessentially a guy first just like many of us - his resolution to keep the room in an orderly way lasted for precisely ONE day :D ); natheless can't help but feel little doleful as well at our perfectly timely egress. Next time, we meet, I hope we will be on that path where memory or money for that matter doesn't dissolve our fervor. Until then Dasbidaniya!
A place for my erratic insights, thoughts and notions - my own look-back place. There is no set topic or content. It's all about what I like at the moment.
Thursday, April 12, 2018
Wednesday, April 4, 2018
Rum interviewees
I believe, we all have done few hilarious (read embarrassing) stuffs during interviews, for god knows why? I mean, we all have been there, once in a while, haven't we - Not in a horrible way but seriously don't even try to venture into these kinds of a blizzard. And if you do, yes you might have a funny story to share down the lane with your friends and family, but probably without that job in your profile. But Hey, what's the point in life, if you can't make few of your own stories. So if you, like me, have any interview regrets, these should make you feel better – you’re not alone. All these incidents are mind-fart incidents of either mine or my friends. However, for their privacy sake, I will address each of these incidents as a third person. And, obviously, these stories are biased in favor of interviewee so don't read too much in between. However, on a serious note, do acknowledge that the firm for which you are being interviewed has every right to have whatever criteria they deem fit but at the same time you should know that they are not doing you any favor - They are looking for their best and you must be looking for your best. So don't sweat over if it doesn't work out - When one door closes, another opens, Always! Go out there, learn and enjoy the process - Be respectful but at the same time expect the same courtesy, otherwise just walk out - No further discussion!
1. But you are beyond.
Job description: Software Dev (A networking company - ABC)
Interviewer (I): How proficient are you in networking?
Candidate (C): I am okay but not really my expertise.
I: How are you going to survive in ABC, if you don't know these stuffs?
C: But in pre-talk, you had stated that ABC is beyond networking, didn't you!
2. Home guy.
Job description: Software Consultant
Interviewer (I): For 2 days in a week, you have to work from <City 100 KM away>.
Candidate (C): Okay, but I am a work from home kinda guy.
3. Half dressed.
Job description: Back-end SE
So for the online interviews, this guy feels relax with his top-half cloth and for the rest - well let's just say a minimally required element. One fine day, during an online interview, he needed a piece of paper to write his pseudo code, but understandably couldn't get up of his chair to fetch one :)
4. Smile creep.
Job Description: Master Admission
This incident is ancient, 2010. So this guy seriously said what is written in the below pic, in front of whole panel: First smile and then that filmy dialogue. The Profs stomach might be hurting from laughter once the guy was out of the panel.
Job Description: Application dev
Interviewer: Impress me!
Candidate: I'm exceptionally proficient in python and back-end, and I'm pretty expensive!
6. A late wizard?
Job Description: Cloud tools
Interviewer arrives around 20 minutes late.
Interviewer: Hello, how are you doing?
1. But you are beyond.
Job description: Software Dev (A networking company - ABC)
Interviewer (I): How proficient are you in networking?
Candidate (C): I am okay but not really my expertise.
I: How are you going to survive in ABC, if you don't know these stuffs?
C: But in pre-talk, you had stated that ABC is beyond networking, didn't you!
2. Home guy.
Job description: Software Consultant
Interviewer (I): For 2 days in a week, you have to work from <City 100 KM away>.
Candidate (C): Okay, but I am a work from home kinda guy.
3. Half dressed.
Job description: Back-end SE
So for the online interviews, this guy feels relax with his top-half cloth and for the rest - well let's just say a minimally required element. One fine day, during an online interview, he needed a piece of paper to write his pseudo code, but understandably couldn't get up of his chair to fetch one :)
4. Smile creep.
Job Description: Master Admission
This incident is ancient, 2010. So this guy seriously said what is written in the below pic, in front of whole panel: First smile and then that filmy dialogue. The Profs stomach might be hurting from laughter once the guy was out of the panel.
They say a pic is worth a thousand words. What an idiotic answer, LOL!
To the profs, his smile must have looked like this :D
5. Impressed already?Job Description: Application dev
Interviewer: Impress me!
Candidate: I'm exceptionally proficient in python and back-end, and I'm pretty expensive!
6. A late wizard?
Job Description: Cloud tools
Interviewer arrives around 20 minutes late.
Interviewer: Hello, how are you doing?
Candidate: I'm sorry - I'm early!
7. A bird came to city.
Sunday, February 11, 2018
Python’s philosophy Once again
Let's restate the Python's philosophy from the Python terminal itself:
>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
Now I realize, learning a programming language is not that difficult (Disclaimer: Not counting Brainfuck category of languages), however learning software engineering is what it's really hard. Writing code is the easiest part that you could ever do, what indeed matters is how you "engineer" your program. What I need now is to slowly let principles of PEP8 and Flake8 coding guidelines sink into the psyche. My most favorite guideline from PEP8 cookbook:
"Know when to be inconsistent -- sometimes style guide recommendations just aren't applicable. When in doubt, use your best judgment. Look at other examples and decide what looks best. And don't hesitate to ask!"
References:
[1]. https://www.python.org/dev/peps/pep-0008/#introduction
[2]. http://flake8.pycqa.org/en/latest/
>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
Now I realize, learning a programming language is not that difficult (Disclaimer: Not counting Brainfuck category of languages), however learning software engineering is what it's really hard. Writing code is the easiest part that you could ever do, what indeed matters is how you "engineer" your program. What I need now is to slowly let principles of PEP8 and Flake8 coding guidelines sink into the psyche. My most favorite guideline from PEP8 cookbook:
"Know when to be inconsistent -- sometimes style guide recommendations just aren't applicable. When in doubt, use your best judgment. Look at other examples and decide what looks best. And don't hesitate to ask!"
References:
[1]. https://www.python.org/dev/peps/pep-0008/#introduction
[2]. http://flake8.pycqa.org/en/latest/
Monday, January 22, 2018
defaultdict vs. dict in Python
Dictionary is easy to use data-structure for storing data for later retrieval hashed by unique keys. Obviously, the keys should be immutable objects such as string, set or numbers (list can't be key). In some cases, a new key might always have a default value such as an empty list or a numeric value (basically anything). While this is easy to do manually in a standard dictionary, the defaultdict type automates and simplifies these kinds of operations by automatically assigning default values to any new hashable key entry.
Definition of defaultdict:
---------------------------------------------------------------
class collections.defaultdict([default_factory[, ...]])
A defaultdict works exactly like a standard dictionary, but it is initialized with a function (“default_factory”) that takes no arguments and provides the default value for a nonexistent key. A defaultdict will never raise a KeyError. Any key that does not exist gets the value returned by the default_factory. However do remember to pass the default_factory to default_dict otherwise if the default_factory attribute is None, this raises a KeyError exception with the key as the argument (It will then behave just like a standard dictionary).
Be sure to pass the function object to defaultdict(). Do not call the function, i.e. Use defaultdict(func), not defaultdict(func()).
In the following example, a defaultdict is used for counting the frequency of characters in an input string. The default_factory is int, which in turn has a default value of zero. (Note: “lambda: 0″ would also work in this situation). For each character in the string, the value is incremented by one where the key is the character. We do not need to make sure that a character is already a key – it will use the default value of zero.
Example 1:
---------------------------------------------------------------
from collections import defaultdict
def print_dict(user_dict):
for key in user_dict:
print key + ": " + str(user_dict[key])
def default_function(): return 0
input_str = "abccddddeeee"
# All these three methods produce same result.
char_freq_dict = defaultdict(default_function)
# char_freq_dict = defaultdict(int)
# char_freq_dict = defaultdict(lambda: 0)
for ch in input_str:
char_freq_dict[ch] += 1
print_dict(char_freq_dict)
Output:
---------------------------------------------------------------
a: 1
c: 2
b: 1
e: 4
d: 4
You could accomplish the same objective using the standard dictionary in following way:
def print_dict(user_dict):
for key in user_dict:
print key + ": " + str(user_dict[key])
input_str = "abccddddeeee"
char_freq_dict = dict()
for ch in input_str:
if ch not in input_str:
char_freq_dict[ch] = 0
char_freq_dict[ch] += 1
print_dict(char_freq_dict)
In our next example, we use an empty list for any nonexistent key. The input provides a list of tuples consisting country and city. We want to build a dictionary where the keys are the countries and the values are lists of all cities for that country. To build this dictionary of lists, we use a defaultdict with a default_factory of the list. An empty list is created for each new (aka, nonexisting) key.
Example 2:
---------------------------------------------------------------
from collections import defaultdict
def default_function(): return []
def print_dict(user_dict):
for key in user_dict:
print key + ": " + str(user_dict[key])
input_list = [('germany', 'munich'), ('germany', 'berlin'), ('UK', 'london'), ('UK', 'bristol'), ('UK', 'liverpool'), ('sweden', 'stockholm')]
# All these three methods produce same result.
#country_city_dict = defaultdict(default_function)
#country_city_dict = defaultdict(lambda:[])
country_city_dict = defaultdict(list)
for entry in input_list:
country = entry[0]
city = entry[1]
country_city_dict[country].append(city)
print_dict(country_city_dict)
Output:
---------------------------------------------------------------
sweden: ['stockholm']
germany: ['munich', 'berlin']
UK: ['london', 'bristol', 'liverpool']
In the last example, we distinctly demonstrate that a defaultdict never raises a KeyError. Any key that does not exist gets the default value returned by the default_factory.
Example 3:
---------------------------------------------------------------
from collections import defaultdict
def print_dict(user_dict):
for key in user_dict:
print key + ": " + str(user_dict[key])
num_dict = defaultdict(lambda: 'Magic, I am here')
for item in ['a', 'b', 'c']:
if num_dict[item]: print item + " is already present"
# Notice, here we are trying to access value for a key in the if condition, so
# default_dict comes into the picture. if we instead use 'if item in num_dict:'
# , then we are not really accessing this new_key in num_dict and thus
# the default_dict will not be kicked off for this key item.
else: print item + " is Missing"
print_dict(num_dict)
Output:
---------------------------------------------------------------
a is already present
b is already present
c is already present
a: Magic, I am here
c: Magic, I am here
b: Magic, I am here
References:
[1]. https://www.accelebrate.com/blog/using-defaultdict-python/
[2]. https://docs.python.org/2/library/collections.html#collections.defaultdict
Definition of defaultdict:
---------------------------------------------------------------
class collections.defaultdict([default_factory[, ...]])
A defaultdict works exactly like a standard dictionary, but it is initialized with a function (“default_factory”) that takes no arguments and provides the default value for a nonexistent key. A defaultdict will never raise a KeyError. Any key that does not exist gets the value returned by the default_factory. However do remember to pass the default_factory to default_dict otherwise if the default_factory attribute is None, this raises a KeyError exception with the key as the argument (It will then behave just like a standard dictionary).
Be sure to pass the function object to defaultdict(). Do not call the function, i.e. Use defaultdict(func), not defaultdict(func()).
In the following example, a defaultdict is used for counting the frequency of characters in an input string. The default_factory is int, which in turn has a default value of zero. (Note: “lambda: 0″ would also work in this situation). For each character in the string, the value is incremented by one where the key is the character. We do not need to make sure that a character is already a key – it will use the default value of zero.
Example 1:
---------------------------------------------------------------
from collections import defaultdict
def print_dict(user_dict):
for key in user_dict:
print key + ": " + str(user_dict[key])
def default_function(): return 0
input_str = "abccddddeeee"
# All these three methods produce same result.
char_freq_dict = defaultdict(default_function)
# char_freq_dict = defaultdict(int)
# char_freq_dict = defaultdict(lambda: 0)
for ch in input_str:
char_freq_dict[ch] += 1
print_dict(char_freq_dict)
Output:
---------------------------------------------------------------
a: 1
c: 2
b: 1
e: 4
d: 4
You could accomplish the same objective using the standard dictionary in following way:
def print_dict(user_dict):
for key in user_dict:
print key + ": " + str(user_dict[key])
input_str = "abccddddeeee"
char_freq_dict = dict()
for ch in input_str:
if ch not in input_str:
char_freq_dict[ch] = 0
char_freq_dict[ch] += 1
print_dict(char_freq_dict)
In our next example, we use an empty list for any nonexistent key. The input provides a list of tuples consisting country and city. We want to build a dictionary where the keys are the countries and the values are lists of all cities for that country. To build this dictionary of lists, we use a defaultdict with a default_factory of the list. An empty list is created for each new (aka, nonexisting) key.
Example 2:
---------------------------------------------------------------
from collections import defaultdict
def default_function(): return []
def print_dict(user_dict):
for key in user_dict:
print key + ": " + str(user_dict[key])
input_list = [('germany', 'munich'), ('germany', 'berlin'), ('UK', 'london'), ('UK', 'bristol'), ('UK', 'liverpool'), ('sweden', 'stockholm')]
# All these three methods produce same result.
#country_city_dict = defaultdict(default_function)
#country_city_dict = defaultdict(lambda:[])
country_city_dict = defaultdict(list)
for entry in input_list:
country = entry[0]
city = entry[1]
country_city_dict[country].append(city)
print_dict(country_city_dict)
Output:
---------------------------------------------------------------
sweden: ['stockholm']
germany: ['munich', 'berlin']
UK: ['london', 'bristol', 'liverpool']
In the last example, we distinctly demonstrate that a defaultdict never raises a KeyError. Any key that does not exist gets the default value returned by the default_factory.
Example 3:
---------------------------------------------------------------
from collections import defaultdict
def print_dict(user_dict):
for key in user_dict:
print key + ": " + str(user_dict[key])
num_dict = defaultdict(lambda: 'Magic, I am here')
for item in ['a', 'b', 'c']:
if num_dict[item]: print item + " is already present"
# Notice, here we are trying to access value for a key in the if condition, so
# default_dict comes into the picture. if we instead use 'if item in num_dict:'
# , then we are not really accessing this new_key in num_dict and thus
# the default_dict will not be kicked off for this key item.
else: print item + " is Missing"
print_dict(num_dict)
Output:
---------------------------------------------------------------
a is already present
b is already present
c is already present
a: Magic, I am here
c: Magic, I am here
b: Magic, I am here
References:
[1]. https://www.accelebrate.com/blog/using-defaultdict-python/
[2]. https://docs.python.org/2/library/collections.html#collections.defaultdict
Thursday, November 2, 2017
As They Say!
Latterly, I had a vivid dream of slowly losing my eyesight, like a lens zooming out of focus - a windy experience. I am not sure what does that signify, some say such dreams represent a loss of intuition, or perhaps a loss of something that is so dear to you. Or maybe, it is the subconscious mind reminder to see the reality what it really is that open eyes can't. Perhaps I see what it is but was refusing to accept as it is, perhaps I know the loss. Whatever it was - it's going to be all okay. As they say - we live and learn. I guess sometimes it becomes hard to be clear about who we are when we are carrying around a bunch of baggage from the past. People say - anytime we make a mistake, we have got two alternatives: Live with it or Fix it. But I have come to realize; sometimes you can neither fix nor live with it. Walking away might seem cowardly, I also used to think so, but sometimes it becomes one last gallant defiance of our spirit. Apparently, it won't cheer up at this stage, but it might give a sense of peace. It is bloody not easy, it can't be cowardly - I now know. It consumes every single ounce of strength that has been left in your soul, you gotta fight like hell with yourself to make sure you are still yourself, but one day it will be all fine, all okay. It's the only way we can look into our face with the same hope and pride that we have always held so close to our anima. We are the superman of our life - as one of the dear friends says. A lesson to gracefully let go, to never look back, let chaos do its job, to surrender when you know in your heart, you did all you could. Gracias life for this rite of passage.
I had read somewhere, "Let everything happen to you". I get its meaning now, I didn't get it then that life is also about losing and losing as gracefully as possible and enjoying everything in between. We may have a fresh start any moment we choose, for this thing that we call 'failure' is not the falling down, but the staying down. They say, life always waits for some crisis to occur before revealing itself at its most brilliant. I guess I should give more credits to my life for what it has offered me. I should be more thankful for disappointments and mayhems that it has offered because without them I would not have stumbled across my own self. Now, I am aware of the fact that my life is far better than I deserve. Besides whatever I do in life, it's just not worth doing if I can't laugh about it, if I can't make a toast over its brilliance or sheer stupidity, someday. I wish one day, I could look at my messy white hair locks in the mirror, howbeit few have graced already, and mumble to myself - you bloody fool! As they say, in the end, all that remains are only memories. I made mine and hopefully time to make new ones. Let's get a job first. Welcome to 30+, as Wish wished. Now let's lighten up and listen to this timeless graffiti. For me, the meaning of this song is not that complicated as many profess. Fukk all... turn off the lights, get a candlelight drink and interpret your own meaning. Now faukkking off, Senor!
I had read somewhere, "Let everything happen to you". I get its meaning now, I didn't get it then that life is also about losing and losing as gracefully as possible and enjoying everything in between. We may have a fresh start any moment we choose, for this thing that we call 'failure' is not the falling down, but the staying down. They say, life always waits for some crisis to occur before revealing itself at its most brilliant. I guess I should give more credits to my life for what it has offered me. I should be more thankful for disappointments and mayhems that it has offered because without them I would not have stumbled across my own self. Now, I am aware of the fact that my life is far better than I deserve. Besides whatever I do in life, it's just not worth doing if I can't laugh about it, if I can't make a toast over its brilliance or sheer stupidity, someday. I wish one day, I could look at my messy white hair locks in the mirror, howbeit few have graced already, and mumble to myself - you bloody fool! As they say, in the end, all that remains are only memories. I made mine and hopefully time to make new ones. Let's get a job first. Welcome to 30+, as Wish wished. Now let's lighten up and listen to this timeless graffiti. For me, the meaning of this song is not that complicated as many profess. Fukk all... turn off the lights, get a candlelight drink and interpret your own meaning. Now faukkking off, Senor!
Saturday, July 15, 2017
Return of Game of Thrones 7
So finally tomorrow is the return of Game of Thrones 7. Ever since Red Wedding, what I seek is the total justice and vengeance for the murder of Catelyn Stark.
She was not a perfect woman but she fought till last, the only thing that ever matters to me, for her loved ones with a woman's motherly courage and strength. A woman with nerves of steel and a loyal heart, I admired her so much, truly and absolutely. She lost everything and yet she kept going. And the list of vengeance includes Baelish, too, a person who loved her for his entire life. I had an admiration for the love he had for Lady Stark but the way he let, the daughter of the woman he loved so immensely, suffer and humiliated repels me to the core. The only justice, that deems just must be served by the other daughter of Lady Stark, cold and raw. He could have saved her but he let all those happen to Sansa. I want him to suffer first, feel each and every bit for what he did and didn't, for what happened to Sansa, for not avenging Lady Stark. I am so bloody mad at him.
Saturday, July 8, 2017
A thesis on Cows
I lived my entire childhood with my four siblings and four cows along with the mother cow (mother & father's cow). My calf (mother cow's granddaughter), when she was born, she had that deep black heavenly eyes, I named her Kajri. I finally had my own mate.
Tragically we lost her at a very young age despite the best efforts of our veterinary doctor. She was around 8 months old. Grief turned out to be a place none of us knew until we reached there. I still remember her last rituals like yesterday. We saw her slowly leaving us, Mother was inconsolable, we were devastated, the last month was completely disastrous, and that was the start of the end of our life with cows. The tragedy of such grief is that the loss of a loved one is irreversible. It is total and final. Over the next few years, Mother kept looking for fitting families and handed over our cows one-by-one.
Living with animals open your eyes to a lot of things that might be unattainable otherwise. Our cows, they had souls, they had their own favorites, just like your pets, they love as we do. In the beginning, you might not understand them but eventually, you get past your fear and you realize how much personality they have and how individual they are, you finally overcome the barrier of human language and speak in the language of love, just as they do. Being an animal doesn't mean they are less than a person, they are just different, but not less. I feel I had a very pleasant childhood - being youngest, caring siblings, loving parents, a gorgeous woman (mother's friend) who had promised to marry and continue the flow of sweets and biscuits (totally despised her husband at that time), when I would be grown up, and not to mention our wonderful cows. What invoked those stuffs is this master thesis that a friend just sent. Well, right now, it seems too far in distant future, but one day I hope, I and my daughters and sons, we will have a cow and her calf, a dog and a small place to grow plants just like my parents had.
By the way, this is the thesis. If it had come earlier, I would have loved to pursue this exciting topic - machine learning and cows.
Thesis Abstract:
Dairy farming as one part of agriculture has thousands of year’s history. The increasing demands of dairy products and the rapid development of technology bring dairy farming tremendous changes. Started by original hand milking, dairy farming goes through vacuum bucket milking, pipeline milking, and now parlors milking. The automatic and technical milking system provides a farmer with high-efficiency milking, effective herd management and above all booming income.
DeLaval AMR™ is the world's leading automatic milking rotary system. It presents an ultimate combination of technology and machinery which brings dairy farming with significant benefits. AMR™ technical milking capacity is 90 cows per hour. However, constrained by farm management, cow's condition and system configuration, the actual capacity is lower than technical value. In this thesis, an optimization system is designed to analyze and improve AMR™ performance. The research is focusing on cow's behavior and AMR™ robot timeout. Through applying knowledge discovery from the database (KDD), machine learning for bad cow prediction and modeling methods for system simulation, the optimizing solutions are proposed and validated.
Tragically we lost her at a very young age despite the best efforts of our veterinary doctor. She was around 8 months old. Grief turned out to be a place none of us knew until we reached there. I still remember her last rituals like yesterday. We saw her slowly leaving us, Mother was inconsolable, we were devastated, the last month was completely disastrous, and that was the start of the end of our life with cows. The tragedy of such grief is that the loss of a loved one is irreversible. It is total and final. Over the next few years, Mother kept looking for fitting families and handed over our cows one-by-one.
Living with animals open your eyes to a lot of things that might be unattainable otherwise. Our cows, they had souls, they had their own favorites, just like your pets, they love as we do. In the beginning, you might not understand them but eventually, you get past your fear and you realize how much personality they have and how individual they are, you finally overcome the barrier of human language and speak in the language of love, just as they do. Being an animal doesn't mean they are less than a person, they are just different, but not less. I feel I had a very pleasant childhood - being youngest, caring siblings, loving parents, a gorgeous woman (mother's friend) who had promised to marry and continue the flow of sweets and biscuits (totally despised her husband at that time), when I would be grown up, and not to mention our wonderful cows. What invoked those stuffs is this master thesis that a friend just sent. Well, right now, it seems too far in distant future, but one day I hope, I and my daughters and sons, we will have a cow and her calf, a dog and a small place to grow plants just like my parents had.
Watch the story of Maybelle.
Thesis Abstract:
Dairy farming as one part of agriculture has thousands of year’s history. The increasing demands of dairy products and the rapid development of technology bring dairy farming tremendous changes. Started by original hand milking, dairy farming goes through vacuum bucket milking, pipeline milking, and now parlors milking. The automatic and technical milking system provides a farmer with high-efficiency milking, effective herd management and above all booming income.
DeLaval AMR™ is the world's leading automatic milking rotary system. It presents an ultimate combination of technology and machinery which brings dairy farming with significant benefits. AMR™ technical milking capacity is 90 cows per hour. However, constrained by farm management, cow's condition and system configuration, the actual capacity is lower than technical value. In this thesis, an optimization system is designed to analyze and improve AMR™ performance. The research is focusing on cow's behavior and AMR™ robot timeout. Through applying knowledge discovery from the database (KDD), machine learning for bad cow prediction and modeling methods for system simulation, the optimizing solutions are proposed and validated.
Subscribe to:
Posts (Atom)